File tree Expand file tree Collapse file tree 2 files changed +23
-1
lines changed
parser/src/main/java/com/compilerprogramming/ezlang/parser Expand file tree Collapse file tree 2 files changed +23
-1
lines changed Original file line number Diff line number Diff line change @@ -372,9 +372,14 @@ public void accept(ASTVisitor visitor) {
372372 public static class ArrayIndexExpr extends Expr {
373373 public final Expr array ;
374374 public final Expr expr ;
375+ public final boolean loading ;
375376 public ArrayIndexExpr (Expr array , Expr expr ) {
377+ this (array , expr , true );
378+ }
379+ public ArrayIndexExpr (Expr array , Expr expr , boolean loading ) {
376380 this .array = array ;
377381 this .expr = expr ;
382+ this .loading = loading ;
378383 }
379384 @ Override
380385 public StringBuilder toStr (StringBuilder sb ) {
@@ -398,9 +403,14 @@ public void accept(ASTVisitor visitor) {
398403 public static class FieldExpr extends Expr {
399404 public final Expr object ;
400405 public final String fieldName ;
406+ public final boolean loading ;
401407 public FieldExpr (Expr object , String fieldName ) {
408+ this (object , fieldName , true );
409+ }
410+ public FieldExpr (Expr object , String fieldName , boolean loading ) {
402411 this .object = object ;
403412 this .fieldName = fieldName ;
413+ this .loading = loading ;
404414 }
405415 @ Override
406416 public StringBuilder toStr (StringBuilder sb ) {
Original file line number Diff line number Diff line change @@ -246,7 +246,19 @@ private AST.Stmt parseAssign(Lexer lexer) {
246246 testPunctuation (lexer , ";" );
247247 if (rhs == null )
248248 return new AST .ExprStmt (lhs );
249- return new AST .AssignStmt (lhs , rhs );
249+ return new AST .AssignStmt (storing (lhs ), rhs );
250+ }
251+
252+ private AST .Expr storing (AST .Expr lhs ) {
253+ if (lhs instanceof AST .ArrayIndexExpr arrayIndexExpr &&
254+ arrayIndexExpr .loading ) {
255+ return new AST .ArrayIndexExpr (arrayIndexExpr .array , arrayIndexExpr .expr , false );
256+ }
257+ else if (lhs instanceof AST .FieldExpr fieldExpr &&
258+ fieldExpr .loading ) {
259+ return new AST .FieldExpr (fieldExpr .object , fieldExpr .fieldName , false );
260+ }
261+ return lhs ;
250262 }
251263
252264 private AST .Expr parseBool (Lexer lexer ) {
You can’t perform that action at this time.
0 commit comments