From 45f1a26db8ebade3bc5f2bd8eb570a52629d5b9d Mon Sep 17 00:00:00 2001
From: Xun Yang <x299yang@uwaterloo.ca>
Date: Fri, 6 Mar 2020 15:57:06 -0500
Subject: [PATCH] init myType for declarations before type checking

---
 LineNodes.py   |  2 +-
 MemberNodes.py |  2 +-
 TypeNodes.py   | 19 ++-----------------
 3 files changed, 4 insertions(+), 19 deletions(-)

diff --git a/LineNodes.py b/LineNodes.py
index 15ac457..52f1a02 100644
--- a/LineNodes.py
+++ b/LineNodes.py
@@ -108,6 +108,7 @@ class VarDclNode(ASTNode):
             # Handling rule: variableInit expr
             self.variableInit = makeNodeFromExpr(parseTree.children[3].children[0], typeName)
 
+        self.myType = self.dclType.myType
         self.children.append(self.dclType)
         self.children.append(self.variableInit)
 
@@ -122,7 +123,6 @@ class VarDclNode(ASTNode):
             return self.env
 
     def checkType(self):
-        self.myType = self.dclType.myType
         if self.variableInit:
             self.variableInit.checkType()
             if not self.myType.assignable(self.variableInit.myType):
diff --git a/MemberNodes.py b/MemberNodes.py
index 6e27b09..13ba951 100644
--- a/MemberNodes.py
+++ b/MemberNodes.py
@@ -28,6 +28,7 @@ class FieldNode(ASTNode):
                 self.variableDcl = VarDclNode(node, self.typeName)
 
         self.name = self.variableDcl.name
+        self.myType = self.variableDcl.myType
 
         self.children.append(self.variableDcl)
 
@@ -36,7 +37,6 @@ class FieldNode(ASTNode):
 
     def checkType(self):
         self.variableDcl.checkType()
-        self.myType = self.variableDcl.myType
 
 ###########################################################
 
diff --git a/TypeNodes.py b/TypeNodes.py
index 458dea7..1f793e6 100644
--- a/TypeNodes.py
+++ b/TypeNodes.py
@@ -143,7 +143,6 @@ class ClassInterNode(ASTNode):
                 print(i.name)
 
     def checkType(self):
-        self.myType = TypeStruct(self.canonName, self)
         for c in self.children:
             if c and hasattr(c, 'checkType'):
                 c.checkType()
@@ -153,14 +152,6 @@ class ClassNode(ClassInterNode):
     # always list all fields in the init method to show the class structure
     def __init__(self, parseTree, packageName):
         super().__init__(parseTree, packageName)
-        # self.parseTree = parseTree
-        # self.packageName = packageName
-        # self.name = ''
-        # self.methods = []
-        # self.superInter = []
-        # self.env = None
-        # self.children = []
-        # self.canonName = self.packageName + '.' + self.name
         self.fields = []
         self.constructors = []
         self.mods = []
@@ -196,6 +187,7 @@ class ClassNode(ClassInterNode):
                     order += 1
 
         self.canonName = self.packageName + '.' + self.name
+        self.myType = TypeStruct(self.canonName, self)
         self.children += self.fields + self.methods + self.constructors
 
     def buildEnv(self, parentEnv):
@@ -266,14 +258,6 @@ class InterNode(ClassInterNode):
     # always list all fields in the init method to show the class structure
     def __init__(self, parseTree, packageName):
         super().__init__(parseTree, packageName)
-        # self.parseTree = parseTree
-        # self.packageName = packageName
-        # self.name = ''
-        # self.methods = []
-        # self.superInter = []
-        # self.env = None
-        # self.children = []
-        # self.canonName = self.packageName + '.' + self.name
 
         for node in parseTree.children:
             if node.name == 'ID':
@@ -290,6 +274,7 @@ class InterNode(ClassInterNode):
                     self.methods.append(MethodNode(n, self.name, 0))  # order = 0 since no method body in interface needs to be checked
 
         self.canonName = self.packageName + '.' + self.name
+        self.myType = TypeStruct(self.canonName, self)
         self.children.extend(self.methods)
 
     def buildEnv(self, parentEnv):
-- 
GitLab