diff --git a/AST.py b/AST.py index 32e405a9fab05d0b83d826918ba919ef04711b7f..4a219c7b21f8e86e79b071927d2ccf1d55925193 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 3d63f1411361298b52f1d0594e2521bd6bf38f4c..a798f8222b4cdc1e25e0781223091f7f9d660eb2 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 3936a419a93341097957bbf8de46065a1afe7151..146b224ffc1800aa58f8611cfe910cd869b6da4e 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 a75a773616a2bbb2ba6a30785f6913c0404cc63e..2e6ab128ffb1171518bb359a1ceba3e0609718d8 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 476423887f6838e0279a85c938ce82ea1feb45f3..108dc37d780411113f39c2c8d16a7c7cdc342771 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