diff --git a/MemberNodes.py b/MemberNodes.py index 87c3b5a9a104a2570811bfdf77f8590f7159b246..138bd541a24a5016612ca0e609f6b04c300b89c4 100644 --- a/MemberNodes.py +++ b/MemberNodes.py @@ -259,7 +259,7 @@ class MethodNode(ASTNode): self.label = "M_" + self.typeName + "_" + self.name + "_" + self.paramTypes self.code = pLabel(self.typeName + "_" + self.name + "_" + self.paramTypes, "method") # label - thisLoc = 8 # Right after ebp, eip + thisLoc = 8 # Right after ebp, eip bodyCode = "" if self.body: @@ -285,7 +285,7 @@ class MethodNode(ASTNode): if not 'static' in f.mods and f.variableDcl.variableInit: f.variableDcl.variableInit.codeGen() bodyCode += f.variableDcl.variableInit.code - bodyCode += p("mov", "ebx", "[ebp + " + str(thisLoc) + "]") # THIS + bodyCode += p("mov", "ebx", "[ebp - " + str(thisLoc) + "]") # THIS bodyCode += p("mov", "[ebx + " + str(f.offset) + " ]", "eax") # body code diff --git a/codeGenNodes.py b/codeGenNodes.py index 695b6d858166138350bd1dfe4d68e6dd91a0081a..5db74b6f06dc3ce77a2f87dc6b819dc2d5d7fea2 100644 --- a/codeGenNodes.py +++ b/codeGenNodes.py @@ -12,7 +12,7 @@ class genNameNode(): # returns code def codeGen(self): if self.isThis: - self.code = p("mov", "eax", "[ebp + 8]") + self.code = p("mov", "eax", "[ebp - 8]") elif self.nodeLink.__class__.__name__ == "VarDclNode": self.code = p("mov", "eax", "[ebp - " + str(self.nodeLink.offset) + "]") elif self.nodeLink.__class__.__name__ == "ParamNode": @@ -35,7 +35,7 @@ class genNameNode(): result = "" if self.isThis: result = p("mov", "eax", "ebp") - result += p("add", "eax", "8") + result += p("sub", "eax", "8") elif self.nodeLink.__class__.__name__ == "VarDclNode": result = p("mov", "eax", "ebp") result += p("sub", "eax", str(self.nodeLink.offset))