Skip to content
Snippets Groups Projects
Commit bc9a362b authored by Xun Yang's avatar Xun Yang
Browse files

fix instance of

parent 16226671
No related branches found
No related tags found
No related merge requests found
......@@ -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)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment