@@ -25,7 +25,7 @@ public CritVisitor()
2525 }
2626
2727
28- private object ? RemoveArr ( object ? [ ] args )
28+ private static object ? RemoveArr ( object ? [ ] args )
2929 {
3030 if ( args . Length != 2 )
3131 {
@@ -172,6 +172,8 @@ public CritVisitor()
172172
173173 var value = Visit ( context . expression ( ) ) ;
174174
175+ var op = context . assignmentOp ( ) . GetText ( ) ;
176+
175177 if ( varName . Contains ( '[' ) && varName . Contains ( ']' ) )
176178 {
177179 string [ ] variableHelper = varName . Replace ( "]" , string . Empty ) . Split ( '[' ) ;
@@ -203,9 +205,42 @@ public CritVisitor()
203205 }
204206
205207 }
206- else
208+
209+ else switch ( op )
207210 {
208- Variables [ varName ] = value ;
211+ case "*=" :
212+ {
213+ var varValue = Convert . ToSingle ( Variables [ varName ] ! ) ;
214+ Variables [ varName ] = varValue * Convert . ToSingle ( value ! ) ;
215+ break ;
216+ }
217+ case "/=" :
218+ {
219+ var varValue = Convert . ToSingle ( Variables [ varName ] ! ) ;
220+ Variables [ varName ] = varValue / Convert . ToSingle ( value ! ) ;
221+ break ;
222+ }
223+ case "%=" :
224+ {
225+ var varValue = Convert . ToSingle ( Variables [ varName ] ! ) ;
226+ Variables [ varName ] = varValue % Convert . ToSingle ( value ! ) ;
227+ break ;
228+ }
229+ case "+=" :
230+ {
231+ var varValue = Convert . ToSingle ( Variables [ varName ] ! ) ;
232+ Variables [ varName ] = varValue + Convert . ToSingle ( value ! ) ;
233+ break ;
234+ }
235+ case "-=" :
236+ {
237+ var varValue = Convert . ToSingle ( Variables [ varName ] ! ) ;
238+ Variables [ varName ] = varValue - Convert . ToSingle ( value ! ) ;
239+ break ;
240+ }
241+ default :
242+ Variables [ varName ] = value ;
243+ break ;
209244 }
210245
211246
@@ -331,7 +366,6 @@ public CritVisitor()
331366 } ;
332367 }
333368
334-
335369 private static object ? Add ( object ? left , object ? right ) => ( left , right ) switch
336370 {
337371 ( int l , int r ) => l + r ,
0 commit comments