Skip to content

Commit

Permalink
enhance collapse_vars (#3602)
Browse files Browse the repository at this point in the history
  • Loading branch information
alexlamsl committed Nov 20, 2019
1 parent d959e0b commit 81caadb
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 10 deletions.
21 changes: 14 additions & 7 deletions lib/compress.js
Expand Up @@ -1151,7 +1151,7 @@ merge(Compressor.prototype, {
return node;
} else {
replaced++;
if (value_def && candidate instanceof AST_VarDef) return node;
if (value_def) return node;
}
CHANGED = abort = true;
AST_Node.info("Collapsing {name} [{file}:{line},{col}]", {
Expand Down Expand Up @@ -1207,7 +1207,7 @@ merge(Compressor.prototype, {
if (is_lhs(node, multi_replacer.parent())) return node;
def.replaced++;
value_def.replaced--;
return candidate.value.clone();
return get_rvalue(candidate).clone();
}
// Skip (non-executed) functions and (leading) default case in switch statements
if (node instanceof AST_Default || node instanceof AST_Scope) return node;
Expand Down Expand Up @@ -1255,10 +1255,17 @@ merge(Compressor.prototype, {
statements[i].transform(scanner);
}
if (value_def) {
var def = candidate.name.definition();
if (abort && def.references.length - def.replaced > replaced) replaced = false;
else {
abort = false;
var def = lhs.definition();
if (abort) {
var referenced = def.references.length - def.replaced;
if (candidate instanceof AST_Assign) referenced--;
if (referenced > replaced) {
replaced = false;
} else {
abort = false;
}
}
if (!abort) {
hit_index = 0;
hit = funarg;
for (var i = stat_index; !abort && i < statements.length; i++) {
Expand Down Expand Up @@ -1334,7 +1341,7 @@ merge(Compressor.prototype, {
return compressor.option("ie8") && node.name && lvalues.has(node.name.name);
}
if (node instanceof AST_PropAccess) {
return side_effects || node.expression.may_throw_on_access(compressor);
return side_effects || !value_def && node.expression.may_throw_on_access(compressor);
}
if (node instanceof AST_SymbolRef) {
if (symbol_in_lvalues(node, parent)) {
Expand Down
31 changes: 28 additions & 3 deletions test/compress/collapse_vars.js
Expand Up @@ -3852,10 +3852,9 @@ issue_2436_9: {
expect: {
var o = console;
console.log({
x: (c = o).a,
y: c.b,
x: o.a,
y: o.b,
});
var c;
}
expect_stdout: true
}
Expand Down Expand Up @@ -6567,3 +6566,29 @@ issue_3596: {
}
expect_stdout: "42"
}

local_value_replacement: {
options = {
collapse_vars: true,
unused: true,
}
input: {
function f(a, b) {
(a = b) && g(a);
}
function g(c) {
console.log(c);
}
f("FAIL", "PASS");
}
expect: {
function f(a, b) {
(a = b) && g(a);
}
function g(c) {
console.log(c);
}
f("FAIL", "PASS");
}
expect_stdout: "PASS"
}

0 comments on commit 81caadb

Please sign in to comment.