diff --git a/MemberNodes.py b/MemberNodes.py index 075604174100ef3f2e8617ef20362c9a3e1ac0ec..cd982e71ff8ebe98b1aa7a3df9df0b690f6f196a 100644 --- a/MemberNodes.py +++ b/MemberNodes.py @@ -222,6 +222,10 @@ class MethodNode(ASTNode): self.label = "M_" + self.typeName + "_" + self.name + "_" + self.paramTypes self.code = pLabel(self.typeName + "_" + self.name + "_" + self.paramTypes, "method") + # params + for i, param in enumerate(self.params): + param.offset = i * 4 + 8 + if self.body: bodyCode = "" diff --git a/NameNode.py b/NameNode.py index 55033f041430270356258dcbe7554d41c1b985d1..82b0fe0d6b0f6e51e77c27da63894d726fdf1572 100644 --- a/NameNode.py +++ b/NameNode.py @@ -257,7 +257,9 @@ class NameNode(ASTNode): def codeGen(self): self.code = "" if self.prefixLink.__class__.__name__ == "VarDclNode": - self.code = p("mov", "eax", "[ebp - " + str(self.prefixLink.offset) + "]", "access local var" + self.name) + self.code = p("mov", "eax", "[ebp - " + str(self.prefixLink.offset) + "]", "access local var " + self.name) + if self.prefixLink.__class__.__name__ == "ParamNode": + self.code = p("mov", "eax", "[ebp + " + str(self.prefixLink.offset) + "]", "access param " + self.name) # helper def checkProtected(dcl, usage): diff --git a/UnitNodes.py b/UnitNodes.py index a5016def72874d66d3e2d1379b7f8105ebe79f05..606114766223e0f486d3e7238a877ad841611c2f 100644 --- a/UnitNodes.py +++ b/UnitNodes.py @@ -100,6 +100,7 @@ class ParamNode(ASTNode): self.env = None self.children = [self.paramType] self.typeName = typeName + self.offset = 0 # offset on the stack def checkType(self): self.myType = self.paramType.myType