fix corner case in side_effects (#5315)

fixes #5314
This commit is contained in:
Alex Lam S.L
2022-01-27 00:13:19 +00:00
committed by GitHub
parent 371d25944d
commit 67438f3ff9
3 changed files with 90 additions and 3 deletions

View File

@@ -10019,7 +10019,7 @@ Compressor.prototype.compress = function(node) {
return make_sequence(self, convert_args(value)).optimize(compressor); return make_sequence(self, convert_args(value)).optimize(compressor);
} }
} }
if (is_func) { if (is_func && !fn.contains_this()) {
var def, value, var_assigned = false; var def, value, var_assigned = false;
if (can_inline if (can_inline
&& !fn.uses_arguments && !fn.uses_arguments
@@ -10027,8 +10027,7 @@ Compressor.prototype.compress = function(node) {
&& !(fn.name && fn instanceof AST_LambdaExpression) && !(fn.name && fn instanceof AST_LambdaExpression)
&& (exp === fn || !recursive_ref(compressor, def = exp.definition(), fn) && (exp === fn || !recursive_ref(compressor, def = exp.definition(), fn)
&& fn.is_constant_expression(find_scope(compressor))) && fn.is_constant_expression(find_scope(compressor)))
&& (value = can_flatten_body(stat)) && (value = can_flatten_body(stat))) {
&& !fn.contains_this()) {
var replacing = exp === fn || def.single_use && def.references.length - def.replaced == 1; var replacing = exp === fn || def.single_use && def.references.length - def.replaced == 1;
if (can_substitute_directly()) { if (can_substitute_directly()) {
var args = self.args.slice(); var args = self.args.slice();

View File

@@ -2081,3 +2081,43 @@ issue_5256: {
expect_stdout: "undefined" expect_stdout: "undefined"
node_version: ">=8" node_version: ">=8"
} }
issue_5314_1: {
options = {
side_effects: true,
}
input: {
A = this;
new function() {
(function(a = console.log(this === A ? "PASS" : "FAIL")) {})();
}();
}
expect: {
A = this;
(function() {
(function(a = console.log(this === A ? "PASS" : "FAIL")) {})();
})();
}
expect_stdout: "PASS"
node_version: ">=6"
}
issue_5314_2: {
options = {
side_effects: true,
}
input: {
A = this;
new function() {
((a = console.log(this === A ? "FAIL" : "PASS")) => {})();
}();
}
expect: {
A = this;
new function() {
console.log(this === A ? "FAIL" : "PASS");
}();
}
expect_stdout: "PASS"
node_version: ">=6"
}

View File

@@ -3426,3 +3426,51 @@ issue_5288: {
expect_stdout: "PASS" expect_stdout: "PASS"
node_version: ">=6" node_version: ">=6"
} }
issue_5314_1: {
options = {
side_effects: true,
}
input: {
A = this;
new function() {
(function({
[console.log(this === A ? "PASS" : "FAIL")]: a,
}) {})(42);
}();
}
expect: {
A = this;
(function() {
(function({
[console.log(this === A ? "PASS" : "FAIL")]: a,
}) {})(42);
})();
}
expect_stdout: "PASS"
node_version: ">=6"
}
issue_5314_2: {
options = {
side_effects: true,
}
input: {
A = this;
new function() {
(({
[console.log(this === A ? "FAIL" : "PASS")]: a,
}) => {})(42);
}();
}
expect: {
A = this;
new function() {
[ {
[console.log(this === A ? "FAIL" : "PASS")]: [].e,
} ] = [ 42 ];
}();
}
expect_stdout: "PASS"
node_version: ">=6"
}