can_replace = false;
node.right.transform(scanner);
clear_write_only(candidate);
- var assign = make_node(AST_Assign, node, {
+ var folded;
+ if (abort) {
+ folded = candidate;
+ } else {
+ abort = true;
+ lhs.definition().fixed = false;
+ folded = make_node(AST_Binary, candidate, {
+ operator: compound,
+ left: lhs,
+ right: rvalue,
+ });
+ }
+ return make_node(AST_Assign, node, {
operator: "=",
left: node.left,
right: make_node(AST_Binary, node, {
operator: node.operator.slice(0, -1),
- left: abort ? candidate : make_node(AST_Binary, candidate, {
- operator: compound,
- left: lhs,
- right: rvalue,
- }),
+ left: folded,
right: node.right,
}),
});
- abort = true;
- return assign;
}
// Stop immediately if these node types are encountered
if (should_stop(node, parent)) {