fix corner case in inline (#4160)

fixes #4159
This commit is contained in:
Alex Lam S.L
2020-09-29 00:01:38 +01:00
committed by GitHub
parent 9e07ac4102
commit 1d835ac17d
2 changed files with 33 additions and 6 deletions

View File

@@ -4793,15 +4793,15 @@ merge(Compressor.prototype, {
for (var a = node.argnames, i = a.length; --i >= 0;) { for (var a = node.argnames, i = a.length; --i >= 0;) {
var sym = a[i]; var sym = a[i];
var def = sym.definition(); var def = sym.definition();
if (!(def.id in in_use_ids)) { if (def.id in in_use_ids) {
trim = false;
if (indexOf_assign(def, sym) < 0) sym.__unused = null;
} else {
sym.__unused = true; sym.__unused = true;
if (trim) { if (trim) {
log(sym, "Dropping unused function argument {name}"); log(sym, "Dropping unused function argument {name}");
a.pop(); a.pop();
} }
} else {
trim = false;
if (indexOf_assign(def, sym) < 0) sym.__unused = null;
} }
} }
fns_with_marked_args.push(node); fns_with_marked_args.push(node);
@@ -7047,9 +7047,10 @@ merge(Compressor.prototype, {
value: null value: null
})); }));
} }
if (!value) return;
var sym = make_node(AST_SymbolRef, name, name); var sym = make_node(AST_SymbolRef, name, name);
def.references.push(sym); def.references.push(sym);
if (value) expressions.push(make_node(AST_Assign, self, { expressions.push(make_node(AST_Assign, self, {
operator: "=", operator: "=",
left: sym, left: sym,
right: value right: value
@@ -7070,7 +7071,12 @@ merge(Compressor.prototype, {
var symbol = make_node(AST_SymbolVar, name, name); var symbol = make_node(AST_SymbolVar, name, name);
name.definition().orig.push(symbol); name.definition().orig.push(symbol);
if (!value && in_loop) value = make_node(AST_Undefined, self); if (!value && in_loop) value = make_node(AST_Undefined, self);
append_var(decls, expressions, symbol, value); if ("__unused" in name) {
append_var(decls, expressions, symbol);
if (value) expressions.push(value);
} else {
append_var(decls, expressions, symbol, value);
}
} }
} }
decls.reverse(); decls.reverse();

View File

@@ -4808,3 +4808,24 @@ issue_4155: {
"function", "function",
] ]
} }
issue_4159: {
options = {
collapse_vars: true,
inline: true,
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
var a = 42, c = function(b) {
(b = a) && console.log(a++, b);
}(c = a);
}
expect: {
var a = 42;
(b = a) && console.log(a++, b);
var b;
}
expect_stdout: "42 42"
}