diff --git a/ExprPrimaryNodes.py b/ExprPrimaryNodes.py index 7f035493eca83fa54cc2417438e0cc1ee9a7f508..d1dba9a91fdde384cf37338fe35a068ee0090ed5 100644 --- a/ExprPrimaryNodes.py +++ b/ExprPrimaryNodes.py @@ -63,7 +63,7 @@ def makeNodeFromAllPrimary(parseTree, typeName): elif node.name == 'LPAREN': # primaryNoArrayAccess LPAREN expr RPAREN return makeNodeFromExpr(parseTree.children[1], typeName) elif node.name == 'classInstanceCreate': - return ClassCreateNode(node, typeName) + return ClassCreateNode(node.children[0], typeName) elif node.name == 'methodInvoc': return MethodInvNode(node, typeName) elif node.name == 'fieldAccess': @@ -267,16 +267,15 @@ class CastNode(ASTNode): raise Exception("ERROR: Cannot cast type {} to type {}.".format(self.right.myType.name, self.left.myType.name)) ################################################################################### -# classInstanceCreate unqualCreate # unqualCreate NEW name LPAREN args RPAREN class ClassCreateNode(ASTNode): # always list all fields in the init method to show the class structure def __init__(self, parseTree, typeName): - self.parseTree = parseTree.children[0] # input is classInstanceCreate unqualCreate - self.className = TypeNode(parseTree.children[0].children[1], typeName) - self.args = ArgsNode(self.parseTree.children[3], typeName) + self.parseTree = parseTree + self.className = TypeNode(parseTree.children[1], typeName) + self.args = ArgsNode(parseTree.children[3], typeName) self.env = None - self.children = [self.args, self.className] + self.children = [self.className, self.args] self.typeName = typeName self.cons = None # the constructor used to create the class diff --git a/LineNodes.py b/LineNodes.py index c129bf1868706a412152f7452a84ee35d03d842a..89cf11878b4004a351f427c9c23a48180e853d14 100644 --- a/LineNodes.py +++ b/LineNodes.py @@ -1,6 +1,6 @@ from AST import ASTNode, getParseTreeNodes from Environment import Env -from ExprPrimaryNodes import makeNodeFromExpr, makeNodeFromAllPrimary, MethodInvNode +from ExprPrimaryNodes import makeNodeFromExpr, makeNodeFromAllPrimary, MethodInvNode, ClassCreateNode from TheTypeNode import TypeNode, TypeStruct # Contains: @@ -43,6 +43,8 @@ def makeNodeFromStatementExpr(parseTree, typeName): return(makeNodeFromExpr(child, typeName)) elif child.name == 'methodInvoc': return(MethodInvNode(child, typeName)) + elif child.name == "unqualCreate": + return(ClassCreateNode(child, typeName)) # Creates AST node from noTailStatement def makeNodeFromNoTailStatement(parseTree, typeName): diff --git a/joosc.py b/joosc.py index bda3419f63d057fca31f213e578c55cb86dc1ad7..6e1c9699e9473357eae12845c5e156f6943cc4f6 100644 --- a/joosc.py +++ b/joosc.py @@ -55,7 +55,6 @@ def main(): try: disamiguateAndTypeChecking(ASTs) except Exception as e: - # print(e) return 42 return 0