fix corner case in if_return

This commit is contained in:
alexlamsl 2022-09-22 22:18:45 +08:00
parent 43ec350cd2
commit c2acd7ed12
2 changed files with 33 additions and 4 deletions

View File

@ -1828,12 +1828,11 @@ Compressor.prototype.compress = function(node) {
return wrap ? make_sequence(orig, [ make_node(AST_Number, orig, { value: 0 }), val ]) : val;
}
function merge_expression(base, target, scope) {
function merge_expression(base, target) {
var fixed_by_id = new Dictionary();
base.walk(new TreeWalker(function(node) {
if (!(node instanceof AST_SymbolRef)) return;
var def = node.definition();
if (scope && def.scope.resolve() !== scope) return;
var fixed = node.fixed;
if (!fixed || !fixed_by_id.has(def.id)) {
fixed_by_id.set(def.id, fixed);
@ -3836,7 +3835,7 @@ Compressor.prototype.compress = function(node) {
case 2:
value = value.tail_node();
}
merge_expression(value, jump.value, scope);
merge_expression(value, jump.value);
}
function next_index(i) {

View File

@ -1834,7 +1834,7 @@ switch_return_5: {
]
}
merged_references: {
merged_references_1: {
options = {
if_return: true,
reduce_vars: true,
@ -1861,6 +1861,36 @@ merged_references: {
expect_stdout: "PASS"
}
merged_references_2: {
options = {
if_return: true,
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
A = "PASS";
var a;
console.log(function(b) {
if (a = b)
return console && a;
a = FAIL;
return console && a;
}(A));
}
expect: {
A = "PASS";
var a;
console.log(function(b) {
if (a = b);
else
a = FAIL;
return console && a;
}(A));
}
expect_stdout: "PASS"
}
issue_5583: {
options = {
conditionals: true,