var rhs = assign.right;
if (!assign.write_only) return rhs;
if (!(rhs instanceof AST_Binary && lazy_op[rhs.operator])) return rhs;
- var sym = assign.left;
- if (!(sym instanceof AST_SymbolRef) || sym.name != rhs.left.name) return rhs;
- return rhs.right.has_side_effects(compressor) ? rhs : rhs.right;
+ if (!(rhs.left instanceof AST_SymbolRef)) return rhs;
+ if (!(assign.left instanceof AST_SymbolRef)) return rhs;
+ var def = assign.left.definition();
+ if (rhs.left.definition() !== def) return rhs;
+ if (rhs.right.has_side_effects(compressor)) return rhs;
+ if (track_assigns(def, rhs.left)) add_assigns(def, rhs.left);
+ return rhs.right;
}
function scan_ref_scoped(node, descend, init) {