enhance collapse_vars (#3799)
This commit is contained in:
@@ -1264,6 +1264,7 @@ merge(Compressor.prototype, {
|
|||||||
if (stat_index == 0 && compressor.option("unused")) extract_args();
|
if (stat_index == 0 && compressor.option("unused")) extract_args();
|
||||||
// Find collapsible assignments
|
// Find collapsible assignments
|
||||||
var hit_stack = [];
|
var hit_stack = [];
|
||||||
|
var declare_only = Object.create(null);
|
||||||
extract_candidates(statements[stat_index]);
|
extract_candidates(statements[stat_index]);
|
||||||
while (candidates.length > 0) {
|
while (candidates.length > 0) {
|
||||||
hit_stack = candidates.pop();
|
hit_stack = candidates.pop();
|
||||||
@@ -1574,6 +1575,8 @@ merge(Compressor.prototype, {
|
|||||||
candidates.push(hit_stack.slice());
|
candidates.push(hit_stack.slice());
|
||||||
}
|
}
|
||||||
extract_candidates(expr.value);
|
extract_candidates(expr.value);
|
||||||
|
} else {
|
||||||
|
declare_only[expr.name.name] = (declare_only[expr.name.name] || 0) + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
hit_stack.pop();
|
hit_stack.pop();
|
||||||
@@ -1739,6 +1742,7 @@ merge(Compressor.prototype, {
|
|||||||
if (!member(expr.name, def.orig)) return;
|
if (!member(expr.name, def.orig)) return;
|
||||||
var referenced = def.references.length - def.replaced;
|
var referenced = def.references.length - def.replaced;
|
||||||
var declared = def.orig.length - def.eliminated;
|
var declared = def.orig.length - def.eliminated;
|
||||||
|
declared -= declare_only[def.name] || 0;
|
||||||
if (declared > 1 && !(expr.name instanceof AST_SymbolFunarg)) {
|
if (declared > 1 && !(expr.name instanceof AST_SymbolFunarg)) {
|
||||||
mangleable_var(expr.value);
|
mangleable_var(expr.value);
|
||||||
return make_node(AST_SymbolRef, expr.name, expr.name);
|
return make_node(AST_SymbolRef, expr.name, expr.name);
|
||||||
|
|||||||
@@ -2205,8 +2205,8 @@ var_defs: {
|
|||||||
}
|
}
|
||||||
expect: {
|
expect: {
|
||||||
var f1 = function(x, y) {
|
var f1 = function(x, y) {
|
||||||
var r = x + y, z = r * r - r, b = 7;
|
var r = x + y, a = r * r - r, b = 7;
|
||||||
console.log(z + b);
|
console.log(a + b);
|
||||||
};
|
};
|
||||||
f1("1", 0);
|
f1("1", 0);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user