From e650890465780bc03dcce7a4269a420bcf6918ef Mon Sep 17 00:00:00 2001
From: Xun Yang <x299yang@uwaterloo.ca>
Date: Mon, 13 Apr 2020 16:49:21 -0400
Subject: [PATCH] eval assign left to right

---
 ExprPrimaryNodes.py | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/ExprPrimaryNodes.py b/ExprPrimaryNodes.py
index 635d134..4747de8 100644
--- a/ExprPrimaryNodes.py
+++ b/ExprPrimaryNodes.py
@@ -333,16 +333,13 @@ class AssignNode(ASTNode):
 
     def codeGen(self):
         self.code = ""
-        self.code +=("; Evaluate right of assignment\n")
-        self.right.codeGen()
-        self.code = self.right.code
-        self.code += p("push", "eax")
 
         # array assign check
         if self.left.__class__.__name__ == "ArrayAccessNode" and (not self.left.myType.isPrimitive):
             self.code += "; array assign subtype check\n"
             self.left.array.codeGen()
             self.code += self.left.array.code
+            self.code += p("push", "eax")
 
             offset = self.right.myType.typePointer.subTypeOffset
             self.code += p("mov", "ebx", "[eax]", "start subtype test") # access class tag of left object
@@ -355,10 +352,14 @@ class AssignNode(ASTNode):
 
         self.code +=("; Evaluate left of assignment\n")
         self.code += self.left.addr()
+        self.code += p("push", "eax")
+
+        self.code +=("; Evaluate right of assignment\n")
+        self.right.codeGen()
+        self.code += self.right.code
 
         self.code += p("pop", "ebx")
-        self.code += p("mov", "[eax]", "ebx")
-        self.code += p("mov", "eax", "ebx") # result of assignment is its own value
+        self.code += p("mov", "[ebx]", "eax")
         self.code += ("; End of assignment\n")
 
 
-- 
GitLab