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