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)) {