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