fix corner cases in inline (#5265)

fixes #5263
fixes #5264
This commit is contained in:
Alex Lam S.L
2022-01-04 14:05:03 +00:00
committed by GitHub
parent 2f568b9357
commit 3a3666a94e
2 changed files with 107 additions and 3 deletions

View File

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

View File

@@ -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",
]
}