@@ -51,6 +51,7 @@ public void Dispose( )
51
51
Context . Dispose ( ) ;
52
52
}
53
53
54
+ // <Generate>
54
55
public Value Generate ( Parser parser , IParseTree tree , DiagnosticRepresentations additionalDiagnostics )
55
56
{
56
57
if ( parser . NumberOfSyntaxErrors > 0 )
@@ -60,17 +61,21 @@ public Value Generate( Parser parser, IParseTree tree, DiagnosticRepresentations
60
61
61
62
return Visit ( tree ) ;
62
63
}
64
+ // </Generate>
63
65
64
66
public override Value VisitParenExpression ( [ NotNull ] ParenExpressionContext context )
65
67
{
66
68
return context . Expression . Accept ( this ) ;
67
69
}
68
70
71
+ // <VisitConstExpression>
69
72
public override Value VisitConstExpression ( [ NotNull ] ConstExpressionContext context )
70
73
{
71
74
return Context . CreateConstant ( context . Value ) ;
72
75
}
76
+ // </VisitConstExpression>
73
77
78
+ // <VisitVariableExpression>
74
79
public override Value VisitVariableExpression ( [ NotNull ] VariableExpressionContext context )
75
80
{
76
81
string varName = context . Name ;
@@ -81,6 +86,7 @@ public override Value VisitVariableExpression( [NotNull] VariableExpressionConte
81
86
82
87
return value ;
83
88
}
89
+ // </VisitVariableExpression>
84
90
85
91
public override Value VisitFunctionCallExpression ( [ NotNull ] FunctionCallExpressionContext context )
86
92
{
@@ -94,6 +100,7 @@ public override Value VisitFunctionCallExpression( [NotNull] FunctionCallExpress
94
100
return InstructionBuilder . Call ( function , args ) . RegisterName ( "calltmp" ) ;
95
101
}
96
102
103
+ // <FunctionDeclarations>
97
104
public override Value VisitExternalDeclaration ( [ NotNull ] ExternalDeclarationContext context )
98
105
{
99
106
return context . Signature . Accept ( this ) ;
@@ -103,6 +110,7 @@ public override Value VisitFunctionPrototype( [NotNull] FunctionPrototypeContext
103
110
{
104
111
return GetOrDeclareFunction ( new Prototype ( context ) ) ;
105
112
}
113
+ // </FunctionDeclarations>
106
114
107
115
// <VisitFunctionDefinition>
108
116
public override Value VisitFunctionDefinition ( [ NotNull ] FunctionDefinitionContext context )
@@ -129,6 +137,7 @@ public override Value VisitTopLevelExpression( [NotNull] TopLevelExpressionConte
129
137
}
130
138
// </VisitTopLevelExpression>
131
139
140
+ // <VisitExpression>
132
141
public override Value VisitExpression ( [ NotNull ] ExpressionContext context )
133
142
{
134
143
// Expression: PrimaryExpression (op expression)*
@@ -141,6 +150,7 @@ public override Value VisitExpression( [NotNull] ExpressionContext context )
141
150
142
151
return lhs ;
143
152
}
153
+ // </VisitExpression>
144
154
145
155
// <VisitConditionalExpression>
146
156
public override Value VisitConditionalExpression ( [ NotNull ] ConditionalExpressionContext context )
@@ -158,7 +168,7 @@ public override Value VisitConditionalExpression( [NotNull] ConditionalExpressio
158
168
159
169
var thenBlock = Context . CreateBasicBlock ( "then" , function ) ;
160
170
var elseBlock = Context . CreateBasicBlock ( "else" ) ;
161
- var phiMergeBlock = Context . CreateBasicBlock ( "ifcont" ) ;
171
+ var continueBlock = Context . CreateBasicBlock ( "ifcont" ) ;
162
172
InstructionBuilder . Branch ( condBool , thenBlock , elseBlock ) ;
163
173
164
174
// generate then block
@@ -169,7 +179,7 @@ public override Value VisitConditionalExpression( [NotNull] ConditionalExpressio
169
179
return null ;
170
180
}
171
181
172
- InstructionBuilder . Branch ( phiMergeBlock ) ;
182
+ InstructionBuilder . Branch ( continueBlock ) ;
173
183
174
184
// capture the insert in case generating else adds new blocks
175
185
thenBlock = InstructionBuilder . InsertBlock ;
@@ -183,12 +193,12 @@ public override Value VisitConditionalExpression( [NotNull] ConditionalExpressio
183
193
return null ;
184
194
}
185
195
186
- InstructionBuilder . Branch ( phiMergeBlock ) ;
196
+ InstructionBuilder . Branch ( continueBlock ) ;
187
197
elseBlock = InstructionBuilder . InsertBlock ;
188
198
189
- // generate PHI merge block
190
- function . BasicBlocks . Add ( phiMergeBlock ) ;
191
- InstructionBuilder . PositionAtEnd ( phiMergeBlock ) ;
199
+ // generate continue block
200
+ function . BasicBlocks . Add ( continueBlock ) ;
201
+ InstructionBuilder . PositionAtEnd ( continueBlock ) ;
192
202
var phiNode = InstructionBuilder . PhiNode ( function . Context . DoubleType )
193
203
. RegisterName ( "iftmp" ) ;
194
204
@@ -294,6 +304,7 @@ public override Value VisitForExpression( [NotNull] ForExpressionContext context
294
304
295
305
protected override Value DefaultResult => null ;
296
306
307
+ // <EmitBinaryOperator>
297
308
private Value EmitBinaryOperator ( Value lhs , BinaryopContext op , IParseTree rightTree )
298
309
{
299
310
var rhs = rightTree . Accept ( this ) ;
@@ -335,6 +346,7 @@ private Value EmitBinaryOperator( Value lhs, BinaryopContext op, IParseTree righ
335
346
throw new CodeGeneratorException ( $ "Invalid binary operator { op . Token . Text } " ) ;
336
347
}
337
348
}
349
+ // </EmitBinaryOperator>
338
350
339
351
// <InitializeModuleAndPassManager>
340
352
private void InitializeModuleAndPassManager ( )
0 commit comments