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

NameNode:addr and methodInv

parent 46c1ee81
No related branches found
No related tags found
3 merge requests!19Namenode,!16Sit,!15Method inv
......@@ -254,11 +254,25 @@ class NameNode(ASTNode):
# pprint(vars(self))
raise Exception("ERROR: Cannot check type of name {}".format(self.name))
# generates code that evaluates the address of whatever this NameNode is
# result stored in eax (address)
def addr(self):
result = ""
if self.prefixLink.__class__.__name__ == "VarDclNode":
result = self.prefixLink.addr()
if self.prefixLink.__class__.__name__ == "ParamNode":
result = p("mov", "eax", "ebp")
result += p("add", "eax", str(self.offset))
return result
def codeGen(self):
self.code = ""
if self.prefixLink.__class__.__name__ == "VarDclNode":
if self.methodInvoke or self.prefixLink.__class__.__name__ == "MethodInvNode":
self.code = p("mov", "eax", "C_" + str(self.methodClass.name), "access class object " + self.name)
elif self.prefixLink.__class__.__name__ == "VarDclNode":
self.code = p("mov", "eax", "[ebp - " + str(self.prefixLink.offset) + "]", "access local var " + self.name)
if self.prefixLink.__class__.__name__ == "ParamNode":
elif self.prefixLink.__class__.__name__ == "ParamNode":
self.code = p("mov", "eax", "[ebp + " + str(self.prefixLink.offset) + "]", "access param " + self.name)
# helper
......
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