enhance collapse_vars (#3799)

This commit is contained in:
Alex Lam S.L
2020-04-18 16:12:20 +01:00
committed by GitHub
parent fd6144d95b
commit 2a508c6e5f
2 changed files with 6 additions and 2 deletions

View File

@@ -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);

View File

@@ -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);
} }