diff --git a/src/main/java/chocopy/pa2/TypeChecker.java b/src/main/java/chocopy/pa2/TypeChecker.java index 9c86167a368688998470eb4bef809eaeb231483e..6e18fa97c62d6dd77f97ecf7a5df00b80b5a8258 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)) {