Skip to content
Snippets Groups Projects
Commit 68c2b22e authored by pycsham's avatar pycsham
Browse files

added checks for definite assignemnt. some minor fixes required

parent 1cb3e0cf
No related branches found
No related tags found
No related merge requests found
......@@ -31,7 +31,7 @@ def makeNodeFromAllStatement(parseTree, typeName):
return WhileNode(child, typeName)
elif child.name == 'variableDcl':
return VarDclNode(child, typeName)
return VarDclNode(child, typeName, True)
# Creates AST node from statementExpr
......@@ -94,7 +94,7 @@ class BlockNode(ASTNode):
# 1. variableDcl type ID
# 2. variableDcl type ID ASSIGN variableInit
class VarDclNode(ASTNode):
def __init__(self, parseTree, typeName):
def __init__(self, parseTree, typeName, checkAssign=False):
self.parseTree = parseTree
self.dclType = None
self.name = None # variable name
......@@ -110,6 +110,11 @@ class VarDclNode(ASTNode):
# Handling rule: variableInit expr
self.variableInit = makeNodeFromExpr(parseTree.children[3].children[0], typeName)
# Checking for definite assignment
if checkAssign:
if not self.variableInit:
raise Exception("ERROR: local variable declaration not assigned")
self.myType = self.dclType.myType
self.children.append(self.dclType)
self.children.append(self.variableInit)
......
......@@ -137,8 +137,10 @@ def run(testFiles):
# if n == "Tests/A3/J1_accessstaticfield/Main.java":
# print(n)
# print(t)
ASTs = astBuild(parseTrees)
try:
ASTs = astBuild(parseTrees)
except Exception as e:
return "AST buidling: " + e.args[0]
# for (n, t) in ASTs:
# print(n)
......
......@@ -45,7 +45,10 @@ def main():
parseTrees.append((f, tree))
# Building ASTs from all parse trees
ASTs = astBuild(parseTrees)
try:
ASTs = astBuild(parseTrees)
except Exception as e: # for definite assignemnt
return 42
try:
buildEnvAndLink(ASTs)
......
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