Skip to content

Commit

Permalink
fix corner cases in inline (#5265)
Browse files Browse the repository at this point in the history
fixes #5263
fixes #5264
  • Loading branch information
alexlamsl committed Jan 4, 2022
1 parent 2f568b9 commit 3a3666a
Show file tree
Hide file tree
Showing 2 changed files with 107 additions and 3 deletions.
8 changes: 5 additions & 3 deletions lib/compress.js
Expand Up @@ -12999,6 +12999,7 @@ Compressor.prototype.compress = function(node) {
});
var body = [];
fn.variables.each(function(def, name) {
if (name == "arguments") return;
names.set(name, true);
scope.enclosed.push(def);
scope.variables.set(name, def);
Expand All @@ -13007,9 +13008,10 @@ Compressor.prototype.compress = function(node) {
if (fn.functions.has(name) && def.orig.length == 1) return;
if (def.references.length == def.replaced) return;
if (!all(def.orig, function(sym) {
return !(sym instanceof AST_SymbolConst
|| sym instanceof AST_SymbolFunarg
|| sym instanceof AST_SymbolLet);
if (sym instanceof AST_SymbolConst) return false;
if (sym instanceof AST_SymbolFunarg) return def.scope.resolve() !== fn;
if (sym instanceof AST_SymbolLet) return false;
return true;
})) return;
var sym = def.orig[0];
var ref = make_node(AST_SymbolRef, sym, flatten_var(sym));
Expand Down
102 changes: 102 additions & 0 deletions test/compress/functions.js
Expand Up @@ -7875,3 +7875,105 @@ issue_5254_2: {
"undefined",
]
}

issue_5263: {
options = {
inline: true,
side_effects: true,
toplevel: true,
}
input: {
for (var i = 0; i < 2; i++) (function() {
while (console.log(i));
(function(a) {
console.log(a) && a,
a++;
})();
})();
}
expect: {
for (var i = 0; i < 2; i++) {
a = void 0;
while (console.log(i));
console.log(a),
a++;
var a;
}
}
expect_stdout: [
"0",
"undefined",
"1",
"undefined",
]
}

issue_5264_1: {
options = {
if_return: true,
inline: true,
reduce_vars: true,
unused: true,
}
input: {
console.log(function() {
function f(arguments) {
console.log(arguments);
(function() {
while (console.log("foo"));
})();
}
f("bar");
return arguments;
}("baz")[0]);
}
expect: {
console.log(function() {
(function(arguments) {
console.log(arguments);
while (console.log("foo"));
})("bar");
return arguments;
}("baz")[0]);
}
expect_stdout: [
"bar",
"foo",
"baz",
]
}

issue_5264_2: {
options = {
inline: true,
reduce_vars: true,
side_effects: true,
unused: true,
}
input: {
console.log(function() {
function f(arguments) {
console.log(arguments);
(function() {
while (console.log("foo"));
})();
}
f("bar");
return arguments;
}("baz")[0]);
}
expect: {
console.log(function() {
(function(arguments) {
console.log(arguments);
while (console.log("foo"));
})("bar");
return arguments;
}("baz")[0]);
}
expect_stdout: [
"bar",
"foo",
"baz",
]
}

0 comments on commit 3a3666a

Please sign in to comment.