Skip to content
Snippets Groups Projects
Commit 0225b868 authored by Nicholas Robinson's avatar Nicholas Robinson
Browse files

getParseTreeNodes & TypeNode name

- fixed getParseTreeNodes
- fixed getting name for TypeNode
parent f6057636
No related branches found
No related tags found
No related merge requests found
......@@ -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
......@@ -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))
......
......@@ -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 ")
......
......@@ -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)
......
......@@ -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
......
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