Skip to content

Commit f027848

Browse files
Merge pull request #35 from CompilerProgramming/develop
At parse time set a flag on index and field expressions when we detec…
2 parents 24340b3 + 00ea3c0 commit f027848

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

parser/src/main/java/com/compilerprogramming/ezlang/parser/AST.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff 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) {

parser/src/main/java/com/compilerprogramming/ezlang/parser/Parser.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff 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) {

0 commit comments

Comments
 (0)