From 0225b868a46a15c867144b8da2c7924ff211542c Mon Sep 17 00:00:00 2001 From: Nicholas Robinson <nwrobins@edu.uwaterloo.ca> Date: Fri, 28 Feb 2020 13:06:02 -0500 Subject: [PATCH] getParseTreeNodes & TypeNode name - fixed getParseTreeNodes - fixed getting name for TypeNode --- AST.py | 2 +- Environment.py | 7 ++++--- Test.py | 4 ++-- TypeNodes.py | 4 ---- UnitNodes.py | 1 + 5 files changed, 8 insertions(+), 10 deletions(-) diff --git a/AST.py b/AST.py index 32e405a..4a219c7 100644 --- a/AST.py +++ b/AST.py @@ -95,5 +95,5 @@ def getParseTreeNodes(names, tree, terminateList = []): elif n.name in terminateList: continue else: - result.extend(getParseTreeNodes(names, n)) + result.extend(getParseTreeNodes(names, n, terminateList)) return result diff --git a/Environment.py b/Environment.py index 3d63f14..a798f82 100644 --- a/Environment.py +++ b/Environment.py @@ -104,9 +104,8 @@ class GlobalEnv(Env): # 1. enclosing class/interface # - already did # 2. single-type import - if name in imported: - if name in self.map: - return self.map.get(name) + if name in imported and name in self.map: + return self.map.get(name) # 3. type in the current package full = packageName + '.' + name # print(full) @@ -123,6 +122,8 @@ class GlobalEnv(Env): for i in implicitly: if i in name and name in self.map: return self.map.get(name) + elif (i+name) in self.map: + return self.map.get(i+name) raise Exception("ERROR: Can't find definition of {} in the Environment".format(key)) diff --git a/Test.py b/Test.py index 3936a41..146b224 100644 --- a/Test.py +++ b/Test.py @@ -45,9 +45,9 @@ def a2Multiple(): print(c) print("**********************************************************") # get all files from stdlib folder - # testFiles = [join(dp, f) for dp, dn, filenames in walk('stdlib/2.0/java/') for f in filenames] + testFiles = [join(dp, f) for dp, dn, filenames in walk('stdlib/2.0/java/') for f in filenames] # get all files in the folder recursively - testFiles = [join(dp, f) for dp, dn, filenames in walk(c) for f in filenames] + testFiles += [join(dp, f) for dp, dn, filenames in walk(c) for f in filenames] run(testFiles) print("\n \n\n ") diff --git a/TypeNodes.py b/TypeNodes.py index a75a773..2e6ab12 100644 --- a/TypeNodes.py +++ b/TypeNodes.py @@ -95,12 +95,8 @@ class ClassNode(ASTNode): # 7. A class or interface must not declare two methods with the same signature (name and parameter types). unique = [] for method in self.methods: - # print(method.name) key = (method.name, method.paramTypes) if key in unique: - # print(self.methods) - # print(key) - # print(unique) raise Exception("ERROR: Class '{}' declares 2 methods with the same signature '{}'".format(self.name, key[0])) unique.append(key) diff --git a/UnitNodes.py b/UnitNodes.py index 4764238..108dc37 100644 --- a/UnitNodes.py +++ b/UnitNodes.py @@ -63,6 +63,7 @@ class TypeNode(ASTNode): nameNodes = getParseTreeNodes(['BOOLEAN', 'BYTE', 'CHAR', 'INT', 'SHORT'], parseTree) if nameNodes: self.isPrimType = True + self.name = nameNodes[0].lex else: self.name = getParseTreeNodes(['ID', 'COMPID'], parseTree)[0].lex -- GitLab