diff --git a/ExprPrimaryNodes.py b/ExprPrimaryNodes.py index 635d1342da41c373539b358ae90e3b57e5d6ffca..4747de8f6674b86376d9f8419e2dcde1581ab1bc 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")