From d481643617027c4d738f8613fbe9d9641431597b Mon Sep 17 00:00:00 2001 From: Recolic Keghart <root@recolic.net> Date: Sat, 6 Apr 2019 21:08:17 -0700 Subject: [PATCH] multi-assign stmt bug fix. silly TA not using reference-type for assignment --- src/main/java/chocopy/pa2/TypeChecker.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/main/java/chocopy/pa2/TypeChecker.java b/src/main/java/chocopy/pa2/TypeChecker.java index 9c86167..6e18fa9 100644 --- a/src/main/java/chocopy/pa2/TypeChecker.java +++ b/src/main/java/chocopy/pa2/TypeChecker.java @@ -181,14 +181,20 @@ public class TypeChecker extends AbstractNodeAnalyzer<SymbolType> { if(right_type == null) right_type = NONE_TYPE; for(Expr target : node.targets) { - Identifier id = (Identifier) target; - if(id == null) { - err(node, "assign to non-identifier expr."); - return NONE_TYPE; + System.out.println("assign: " + target.getClass().getName()); + if(target instanceof IndexExpr) { + IndexExpr indexExpr = (IndexExpr) target; + left_type = indexExpr.dispatch(this); + } + else if(target instanceof Identifier) { + Identifier id = (Identifier) target; + left_type = id.dispatch(this); + } + else { + err(node, "Not implemented assignStmt"); } - left_type = id.dispatch(this); if(left_type == null) { - err(node, "Syntax error: assign to non-declared variable: " + id.name); + err(node, "Syntax error: assign to non-declared variable"); return NONE_TYPE; } if(!typeConvertible(right_type, left_type)) { -- GitLab