if (!--replaced) abort = true;
if (is_lhs(node, multi_replacer.parent())) return node;
def.replaced++;
- value_def.replaced--;
- return rvalue.clone();
+ var ref = rvalue.clone();
+ value_def.references.push(ref);
+ return ref;
}
// Skip (non-executed) functions and (leading) default case in switch statements
if (node instanceof AST_Default || node instanceof AST_Scope) return node;
vars.set(def.name.name, def);
++vars_found;
});
- var seq = node.to_assignments(compressor);
+ var seq = node.to_assignments();
var p = tt.parent();
if (p instanceof AST_ForIn && p.init === node) {
if (seq) return seq;
AST_Let.DEFMETHOD("remove_initializers", remove_initializers);
AST_Var.DEFMETHOD("remove_initializers", remove_initializers);
- AST_Definitions.DEFMETHOD("to_assignments", function(compressor) {
- var reduce_vars = compressor.option("reduce_vars");
- var assignments = this.definitions.reduce(function(a, def) {
- if (def.value) {
- var name = make_node(AST_SymbolRef, def.name, def.name);
- a.push(make_node(AST_Assign, def, {
+ AST_Definitions.DEFMETHOD("to_assignments", function() {
+ var assignments = this.definitions.reduce(function(a, defn) {
+ var def = defn.name.definition();
+ if (defn.value) {
+ var name = make_node(AST_SymbolRef, defn.name, defn.name);
+ a.push(make_node(AST_Assign, defn, {
operator : "=",
left : name,
- right : def.value
+ right : defn.value
}));
- if (reduce_vars) name.definition().fixed = false;
+ def.references.push(name);
}
- def = def.name.definition();
def.eliminated++;
- def.replaced--;
return a;
}, []);
if (assignments.length == 0) return null;