From 68c2b22e22b08b038d271a87a5ddbe7af0331797 Mon Sep 17 00:00:00 2001
From: pycsham <shampuiyanchloe@gmail.com>
Date: Thu, 12 Mar 2020 19:33:24 -0400
Subject: [PATCH] added checks for definite assignemnt. some minor fixes
 required

---
 LineNodes.py | 9 +++++++--
 Test.py      | 6 ++++--
 joosc.py     | 5 ++++-
 3 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/LineNodes.py b/LineNodes.py
index 30058be..ca29384 100644
--- a/LineNodes.py
+++ b/LineNodes.py
@@ -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)
diff --git a/Test.py b/Test.py
index a08be2a..e0dcfd6 100644
--- a/Test.py
+++ b/Test.py
@@ -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)
diff --git a/joosc.py b/joosc.py
index 6e1c969..fad79f1 100644
--- a/joosc.py
+++ b/joosc.py
@@ -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)
-- 
GitLab