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