Skip to content

Commit aff13e4

Browse files
committed
Add initial block visitor to GeneratorOutputPass.
1 parent f03a56f commit aff13e4

File tree

2 files changed

+72
-1
lines changed

2 files changed

+72
-1
lines changed

src/Generator/Passes/Pass.cs

Lines changed: 70 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,78 @@ public abstract class GeneratorOutputPass
5858
{
5959
public IDiagnostics Log { get; set; }
6060

61+
public virtual void HandleBlock(Block block)
62+
{
63+
switch(block.Kind)
64+
{
65+
case BlockKind.Class:
66+
VisitClass(block);
67+
break;
68+
case BlockKind.Method:
69+
VisitMethod(block);
70+
break;
71+
case BlockKind.Constructor:
72+
VisitConstructor(block);
73+
break;
74+
case BlockKind.ConstructorBody:
75+
VisitConstructorBody(block);
76+
break;
77+
case BlockKind.Namespace:
78+
VisitNamespace(block);
79+
break;
80+
case BlockKind.Includes:
81+
VisitIncludes(block);
82+
break;
83+
}
84+
85+
foreach (var childBlock in block.Blocks)
86+
HandleBlock(childBlock);
87+
}
88+
89+
public virtual void VisitCodeGenerator(CodeGenerator generator)
90+
{
91+
foreach (var block in generator.ActiveBlock.Blocks)
92+
{
93+
HandleBlock(block);
94+
}
95+
}
96+
6197
public virtual void VisitGeneratorOutput(GeneratorOutput output)
6298
{
63-
99+
foreach (var generator in output.Outputs)
100+
{
101+
VisitCodeGenerator(generator);
102+
}
103+
}
104+
105+
public virtual void VisitClass(Block block)
106+
{
107+
108+
}
109+
110+
public virtual void VisitNamespace(Block block)
111+
{
112+
113+
}
114+
115+
public virtual void VisitMethod(Block block)
116+
{
117+
118+
}
119+
120+
public virtual void VisitConstructor(Block block)
121+
{
122+
123+
}
124+
125+
public virtual void VisitConstructorBody(Block block)
126+
{
127+
128+
}
129+
130+
public virtual void VisitIncludes(Block block)
131+
{
132+
64133
}
65134
}
66135
}

src/Generator/Utils/BlockGenerator.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public enum BlockKind
2424
Footer,
2525
Usings,
2626
Namespace,
27+
TranslationUnit,
2728
Enum,
2829
EnumItem,
2930
Typedef,
@@ -52,6 +53,7 @@ public enum BlockKind
5253
Destructor,
5354
AccessSpecifier,
5455
Fields,
56+
Constructor,
5557
ConstructorBody,
5658
DestructorBody,
5759
FinalizerBody

0 commit comments

Comments
 (0)