Skip to content
Snippets Groups Projects
Commit e6508904 authored by Xun Yang's avatar Xun Yang
Browse files

eval assign left to right

parent e1caa6ff
No related branches found
No related tags found
2 merge requests!30New new string,!20Master
......@@ -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")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment