66using Cesium . CodeGen . Contexts ;
77using Cesium . CodeGen . Ir . BlockItems ;
88using Cesium . CodeGen . Ir . Declarations ;
9+ using Cesium . CodeGen . Ir . Expressions ;
910using Cesium . Core ;
1011using System . Diagnostics ;
12+ using static System . Runtime . InteropServices . JavaScript . JSType ;
1113using AmbiguousBlockItem = Cesium . Ast . AmbiguousBlockItem ;
1214using BreakStatement = Cesium . Ast . BreakStatement ;
1315using CaseStatement = Cesium . Ast . CaseStatement ;
@@ -127,6 +129,10 @@ public static void Dump(this Ir.Expressions.IExpression expression, TextWriter w
127129 binaryExpression . Operator . Dump ( writer ) ;
128130 binaryExpression . Right . Dump ( writer ) ;
129131 break ;
132+ case Ir . Expressions . UnaryOperatorExpression unaryExpression :
133+ unaryExpression . Operator . Dump ( writer ) ;
134+ unaryExpression . Target . Dump ( writer ) ;
135+ break ;
130136 case Ir . Expressions . ConstantLiteralExpression constLiteralExpression :
131137 constLiteralExpression . Constant . Dump ( writer ) ;
132138 break ;
@@ -136,6 +142,110 @@ public static void Dump(this Ir.Expressions.IExpression expression, TextWriter w
136142 case Ir . Expressions . PostfixIncrementDecrementExpression . ValuePreservationExpression valuePreservationExpression :
137143 valuePreservationExpression . Expression . Dump ( writer ) ;
138144 break ;
145+ case Ir . Expressions . LocalAllocationExpression localAllocationExpression :
146+ writer . Write ( $ "{ localAllocationExpression . ArrayType . Base . ToString ( ) } [{ localAllocationExpression . ArrayType . Size } ]") ;
147+ break ;
148+ case Ir . Expressions . GetAddressValueExpression getAddressValueExpression :
149+ writer . Write ( $ "&") ;
150+ getAddressValueExpression . Value . Dump ( writer ) ;
151+ break ;
152+ case Ir . Expressions . IdentifierExpression identifierExpression :
153+ writer . Write ( identifierExpression . Identifier ) ;
154+ break ;
155+ case Ir . Expressions . FunctionCallExpression functionCallExpression :
156+ functionCallExpression . Function . Dump ( writer ) ;
157+ writer . Write ( $ "(") ;
158+ for ( var i = 0 ; i < functionCallExpression . Arguments . Count ; i ++ )
159+ {
160+ if ( i > 0 )
161+ {
162+ writer . Write ( ", " ) ;
163+ }
164+ functionCallExpression . Arguments [ i ] . Dump ( writer ) ;
165+ }
166+ writer . Write ( $ ")") ;
167+ break ;
168+ case Ir . Expressions . CompoundInitializationExpression compoundInitializationExpression :
169+ compoundInitializationExpression . ArrayInitializer . Dump ( writer ) ;
170+ break ;
171+ case Ir . Expressions . ArrayInitializerExpression arrayInitializerExpression :
172+ writer . Write ( "{" ) ;
173+ for ( var i = 0 ; i < arrayInitializerExpression . Initializers . Length ; i ++ )
174+ {
175+ if ( i > 0 )
176+ {
177+ writer . Write ( ", " ) ;
178+ }
179+ arrayInitializerExpression . Initializers [ i ] ? . Dump ( writer ) ;
180+ }
181+ writer . Write ( "}" ) ;
182+ break ;
183+ case Ir . Expressions . CompoundObjectInitializationExpression compoundObjectInitializationExpression :
184+ writer . Write ( "{" ) ;
185+ for ( var i = 0 ; i < compoundObjectInitializationExpression . Initializers . Length ; i ++ )
186+ {
187+ if ( i > 0 )
188+ {
189+ writer . Write ( ", " ) ;
190+ }
191+ compoundObjectInitializationExpression . Initializers [ i ] ? . Dump ( writer ) ;
192+ }
193+ writer . Write ( "}" ) ;
194+ break ;
195+ case Ir . Expressions . CompoundObjectFieldInitializer compoundObjectFieldInitializer :
196+ foreach ( var d in compoundObjectFieldInitializer . Designation . Designators )
197+ {
198+ d . Dump ( writer ) ;
199+ writer . Write ( " = " ) ;
200+ }
201+
202+ compoundObjectFieldInitializer . Inner . Dump ( writer ) ;
203+ writer . Write ( "}" ) ;
204+ break ;
205+ case Ir . Expressions . TypeCastExpression typeCastExpression :
206+ writer . Write ( "(" ) ;
207+ writer . Write ( typeCastExpression . TargetType . ToString ( ) ) ;
208+ writer . Write ( ")" ) ;
209+ typeCastExpression . Expression . Dump ( writer ) ;
210+ break ;
211+ case Ir . Expressions . ConsumeExpression consumeExpression :
212+ consumeExpression . Expression . Dump ( writer ) ;
213+ break ;
214+ case Ir . Expressions . SizeOfOperatorExpression sizeOfOperatorExpression :
215+ writer . Write ( "sizeof(" ) ;
216+ writer . Write ( sizeOfOperatorExpression . Type . ToString ( ) ) ;
217+ writer . Write ( ")" ) ;
218+ break ;
219+ case Ir . Expressions . IndirectFunctionCallExpression indirectFunctionCallExpression :
220+ indirectFunctionCallExpression . Callee . Dump ( writer ) ;
221+ writer . Write ( $ "(") ;
222+ for ( var i = 0 ; i < indirectFunctionCallExpression . Arguments . Count ; i ++ )
223+ {
224+ if ( i > 0 )
225+ {
226+ writer . Write ( ", " ) ;
227+ }
228+ indirectFunctionCallExpression . Arguments [ i ] . Dump ( writer ) ;
229+ }
230+ writer . Write ( $ ")") ;
231+ break ;
232+ case Ir . Expressions . CommaExpression commaExpression :
233+ writer . Write ( "(" ) ;
234+ writer . Write ( commaExpression . Left . ToString ( ) ) ;
235+ writer . Write ( "," ) ;
236+ writer . Write ( commaExpression . Right . ToString ( ) ) ;
237+ writer . Write ( ")" ) ;
238+ break ;
239+ case Ir . Expressions . ConditionalExpression conditionalExpression :
240+ conditionalExpression . Condition . Dump ( writer ) ;
241+ writer . Write ( "?" ) ;
242+ conditionalExpression . TrueExpression . Dump ( writer ) ;
243+ writer . Write ( ":" ) ;
244+ conditionalExpression . FalseExpression . Dump ( writer ) ;
245+ break ;
246+ case Ir . Expressions . InstanceForOffsetOfExpression :
247+ // Do nothing for this expression/value
248+ break ;
139249 default :
140250 Debug . Assert ( false , $ "Dumping { expression . GetType ( ) . Name } not implemented") ;
141251 break ;
@@ -155,6 +265,32 @@ public static void Dump(this Ir.Expressions.Values.IValue expression, TextWriter
155265 writer . Write ( $ "<var #{ localValueVariable . VarIndex } >") ;
156266 }
157267
268+ break ;
269+ case Ir . Expressions . Values . LValueArrayElement localArrayVariable :
270+ localArrayVariable . Array . Dump ( writer ) ;
271+ writer . Write ( $ "[{ localArrayVariable . Index } ]") ;
272+ break ;
273+ case Ir . Expressions . Values . LValueGlobalVariable localGlobalVariable :
274+ writer . Write ( $ "{ localGlobalVariable . Name } ") ;
275+ break ;
276+ case Ir . Expressions . Values . LValueIndirection localIndirection :
277+ writer . Write ( $ "*") ;
278+ localIndirection . PointerExpression . Dump ( writer ) ;
279+ break ;
280+ case Ir . Expressions . Values . LValueParameter parameter :
281+ writer . Write ( parameter . ParameterInfo . Name ) ;
282+ break ;
283+ case Ir . Expressions . Values . LValueInstanceField instanceField :
284+ writer . Write ( "(" ) ;
285+ instanceField . Expression . Dump ( writer ) ;
286+ writer . Write ( ")." ) ;
287+ writer . Write ( instanceField . Name ) ;
288+ break ;
289+ case Ir . Expressions . Values . FunctionValue functionValue :
290+ writer . Write ( functionValue . FunctionInfo . Identifier ) ;
291+ break ;
292+ case Ir . Expressions . InstanceForOffsetOfExpression :
293+ // Do nothing for this expression/value
158294 break ;
159295 default :
160296 Debug . Assert ( false , $ "Dumping { expression . GetType ( ) . Name } not implemented") ;
@@ -167,7 +303,19 @@ public static void Dump(this Ir.Expressions.Constants.IConstant expression, Text
167303 {
168304 case Ir . Expressions . Constants . IntegerConstant integerConstant :
169305 writer . Write ( integerConstant . Value . ToString ( ) ) ;
170-
306+ break ;
307+ case Ir . Expressions . Constants . FloatingPointConstant floatingPointConstant :
308+ writer . Write ( floatingPointConstant . Value . ToString ( ) ) ;
309+ break ;
310+ case Ir . Expressions . Constants . StringConstant stringConstant :
311+ writer . Write ( "\" " ) ;
312+ writer . Write ( stringConstant . Value ) ;
313+ writer . Write ( "\" " ) ;
314+ break ;
315+ case Ir . Expressions . Constants . CharConstant charConstant :
316+ writer . Write ( "'" ) ;
317+ writer . Write ( charConstant . Value ) ;
318+ writer . Write ( "'" ) ;
171319 break ;
172320 default :
173321 Debug . Assert ( false , $ "Dumping { expression . GetType ( ) . Name } not implemented") ;
@@ -179,9 +327,54 @@ public static void Dump(this Ir.Expressions.BinaryOperators.BinaryOperator expre
179327 var operatorString = expression switch
180328 {
181329 Ir . Expressions . BinaryOperators . BinaryOperator . Add => "+" ,
330+ Ir . Expressions . BinaryOperators . BinaryOperator . Subtract => "-" ,
331+ Ir . Expressions . BinaryOperators . BinaryOperator . Multiply => "*" ,
332+ Ir . Expressions . BinaryOperators . BinaryOperator . Divide => "/" ,
333+ Ir . Expressions . BinaryOperators . BinaryOperator . Remainder => "%" ,
334+
335+ Ir . Expressions . BinaryOperators . BinaryOperator . BitwiseLeftShift => "<<" ,
336+ Ir . Expressions . BinaryOperators . BinaryOperator . BitwiseRightShift => ">>" ,
337+ Ir . Expressions . BinaryOperators . BinaryOperator . BitwiseOr => "|" ,
338+ Ir . Expressions . BinaryOperators . BinaryOperator . BitwiseAnd => "&" ,
339+ Ir . Expressions . BinaryOperators . BinaryOperator . BitwiseXor => "^" ,
340+
182341 Ir . Expressions . BinaryOperators . BinaryOperator . EqualTo => "==" ,
342+ Ir . Expressions . BinaryOperators . BinaryOperator . NotEqualTo => "!=" ,
343+ Ir . Expressions . BinaryOperators . BinaryOperator . LessThan => "<" ,
344+ Ir . Expressions . BinaryOperators . BinaryOperator . LessThanOrEqualTo => "<=" ,
345+ Ir . Expressions . BinaryOperators . BinaryOperator . GreaterThan => ">" ,
346+ Ir . Expressions . BinaryOperators . BinaryOperator . GreaterThanOrEqualTo => ">=" ,
347+
348+ Ir . Expressions . BinaryOperators . BinaryOperator . LogicalOr => "||" ,
349+ Ir . Expressions . BinaryOperators . BinaryOperator . LogicalAnd => "&&" ,
183350 _ => throw new InvalidOperationException ( $ "Dumping BinaryOperator.{ expression } not implemented") ,
184351 } ;
185352 writer . Write ( operatorString ) ;
186353 }
354+ public static void Dump ( this Ir . Expressions . UnaryOperator expression , TextWriter writer )
355+ {
356+ var operatorString = expression switch
357+ {
358+ Ir . Expressions . UnaryOperator . Negation => "-" ,
359+ Ir . Expressions . UnaryOperator . Promotion => "+" ,
360+ Ir . Expressions . UnaryOperator . BitwiseNot => "~" ,
361+ Ir . Expressions . UnaryOperator . LogicalNot => "!" ,
362+ Ir . Expressions . UnaryOperator . AddressOf => "&" ,
363+ Ir . Expressions . UnaryOperator . Indirection => "*" ,
364+ _ => throw new InvalidOperationException ( $ "Dumping UnaryOperator.{ expression } not implemented") ,
365+ } ;
366+ writer . Write ( operatorString ) ;
367+ }
368+ public static void Dump ( this Ast . Designator expression , TextWriter writer )
369+ {
370+ switch ( expression )
371+ {
372+ case Ast . IdentifierDesignator identifier :
373+ writer . Write ( identifier . FieldName ) ;
374+ break ;
375+ default :
376+ Debug . Assert ( false , $ "Dumping { expression . GetType ( ) . Name } not implemented") ;
377+ break ;
378+ }
379+ }
187380}
0 commit comments