From 85c36eaa6e765cf190bf8ea032788e1ae5f1f16c Mon Sep 17 00:00:00 2001 From: Nicholas Wesley Robinson <nwrobinson@uwaterloo.ca> Date: Fri, 10 Apr 2020 17:37:38 -0400 Subject: [PATCH] params cod gen --- MemberNodes.py | 4 ++++ NameNode.py | 4 +++- UnitNodes.py | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/MemberNodes.py b/MemberNodes.py index 0756041..cd982e7 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 55033f0..82b0fe0 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 a5016de..6061147 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 -- GitLab