From bc9a362bd38be48bfc4b90f828ed4791029b229d Mon Sep 17 00:00:00 2001 From: Xun Yang <x299yang@uwaterloo.ca> Date: Fri, 6 Mar 2020 18:32:16 -0500 Subject: [PATCH] fix instance of --- ExprPrimaryNodes.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/ExprPrimaryNodes.py b/ExprPrimaryNodes.py index 92eb8fd..1d948a4 100644 --- a/ExprPrimaryNodes.py +++ b/ExprPrimaryNodes.py @@ -194,7 +194,7 @@ class AssignNode(ASTNode): self.env = None self.children = [] self.typeName = typeName # the type (class/interface) this node belongs under - + if parseTree.children[0].children[0].name == 'fieldAccess': self.left = FieldAccessNode(parseTree.children[0].children[0], typeName) elif parseTree.children[0].children[0].name == 'arrayAccess': @@ -210,16 +210,16 @@ class AssignNode(ASTNode): self.right.disambigName() # helperDisambigName(self.right) # helperDisambigName(self.left) - + def checkType(self): self.left.checkType() self.right.checkType() - + if self.left.myType.assignable(self.right.myType): self.myType = self.left.myType return - raise Exception("ERROR: assignment operation failed. Cannot assign type {0} to type {1} at class {2}".format(self.left.myType.name, self.right.myType.name, self.typeName)) + raise Exception("ERROR: assignment operation failed. Cannot assign type {0} to type {1} at class {2}".format(self.left.myType.name, self.right.myType.name, self.typeName)) ################################################################################## @@ -361,7 +361,7 @@ class ExprNode(ASTNode): return # Numeric types - elif self.left.myType.isNum() and self.right.myType.isNum(): + if self.left.myType.isNum() and self.right.myType.isNum(): # Comparisons: if self.op in ['==', '!=', '<=', '>=', '>', '<']: self.myType = TypeStruct("boolean", None) @@ -371,18 +371,22 @@ class ExprNode(ASTNode): self.myType = TypeStruct("int", None) return # Boolean operations: - elif self.left.myType.name == 'boolean' and self.right.myType.name == 'boolean': + if self.left.myType.name == 'boolean' and self.right.myType.name == 'boolean': if self.op in ['&&', '&', '|', '||', '!=', '==']: self.myType = TypeStruct("boolean", None) return # Other Comparisons: - elif self.left.myType.assignable(self.right.myType) or self.right.myType.assignable(self.left.myType): - if self.op == '==' or self.op == '!=' or self.op == 'instanceof': + if self.op == 'instanceof': + self.myType = TypeStruct("boolean", None) + return + + if self.left.myType.assignable(self.right.myType) or self.right.myType.assignable(self.left.myType): + if self.op == '==' or self.op == '!=': self.myType = TypeStruct("boolean", None) return # String concat: - elif (self.left.myType.name =='java.lang.String' and self.right.myType.name not in ['null', 'void']) \ + if (self.left.myType.name =='java.lang.String' and self.right.myType.name not in ['null', 'void']) \ or (self.right.myType.name =='java.lang.String' and self.left.myType.name not in ['null', 'void']): self.myType = TypeStruct('java.lang.String', self.env.getNode('java.lang.String', 'type')) self.myType.link(self.env) -- GitLab