Skip to content
Snippets Groups Projects
Commit 14f8dfc5 authored by Rafael Ravedutti Lucio Machado's avatar Rafael Ravedutti Lucio Machado
Browse files

Fix issue with AugAssign

parent 0f17ba9e
No related branches found
No related tags found
No related merge requests found
...@@ -91,7 +91,6 @@ class BuildParticleIR(ast.NodeVisitor): ...@@ -91,7 +91,6 @@ class BuildParticleIR(ast.NodeVisitor):
self.ctx_symbols.update(symbols) self.ctx_symbols.update(symbols)
def visit_Assign(self, node): def visit_Assign(self, node):
#print(ast.dump(node))
assert len(node.targets) == 1, "Only one target is allowed on assignments!" assert len(node.targets) == 1, "Only one target is allowed on assignments!"
lhs = self.visit(node.targets[0]) lhs = self.visit(node.targets[0])
rhs = self.visit(node.value) rhs = self.visit(node.value)
...@@ -104,15 +103,16 @@ class BuildParticleIR(ast.NodeVisitor): ...@@ -104,15 +103,16 @@ class BuildParticleIR(ast.NodeVisitor):
def visit_AugAssign(self, node): def visit_AugAssign(self, node):
lhs = self.visit(node.target) lhs = self.visit(node.target)
# We need a copy of the target object so it is properly visited during
# compiler analyses and transformations
lhs_copy = self.visit(node.target)
rhs = self.visit(node.value) rhs = self.visit(node.value)
op_class = OperatorClass.from_type_list([lhs.type(), rhs.type()]) op_class = OperatorClass.from_type_list([lhs.type(), rhs.type()])
bin_op = op_class(self.sim, lhs, rhs, BuildParticleIR.get_binary_op(node.op)) bin_op = op_class(self.sim, lhs_copy, rhs, BuildParticleIR.get_binary_op(node.op))
if isinstance(lhs, UndefinedSymbol): assert not isinstance(lhs, UndefinedSymbol), \
self.add_symbols({lhs.symbol_id: bin_op}) f"Invalid AugAssign: symbol {lhs} not defined yet!"
rhs.set_label(lhs.symbol_id) Assign(self.sim, lhs, bin_op)
else:
Assign(self.sim, lhs, bin_op)
def visit_BinOp(self, node): def visit_BinOp(self, node):
#print(ast.dump(node)) #print(ast.dump(node))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment