fix corner case in dead_code (#5154)

fixes #5153
This commit is contained in:
Alex Lam S.L
2021-10-25 06:18:16 +08:00
committed by GitHub
parent 25801627be
commit a0250ec923
2 changed files with 106 additions and 8 deletions

View File

@@ -11562,16 +11562,14 @@ merge(Compressor.prototype, {
node = parent; node = parent;
parent = compressor.parent(level++); parent = compressor.parent(level++);
if (parent instanceof AST_Assign) { if (parent instanceof AST_Assign) {
var found = false; if (parent.left instanceof AST_SymbolRef && parent.left.definition() === def) {
if (in_try(level, parent)) break;
return strip_assignment(def);
}
if (parent.left.match_symbol(function(node) { if (parent.left.match_symbol(function(node) {
if (node instanceof AST_PropAccess) return true; if (node instanceof AST_PropAccess) return true;
if (!found && node instanceof AST_SymbolRef && node.definition() === def) {
if (in_try(level, parent)) return true;
found = true;
}
})) break; })) break;
if (!found) continue; continue;
return strip_assignment(def);
} }
if (parent instanceof AST_Exit) { if (parent instanceof AST_Exit) {
if (!local) break; if (!local) break;

View File

@@ -2127,7 +2127,7 @@ issue_4372_2: {
} }
expect: { expect: {
var a; var a;
[ a ] = [ "PASS", "FAIL" ]; [ a ] = a = [ "PASS", "FAIL" ];
console.log(a); console.log(a);
} }
expect_stdout: "PASS" expect_stdout: "PASS"
@@ -3125,3 +3125,103 @@ issue_5114_3: {
expect_stdout: "PASS" expect_stdout: "PASS"
node_version: ">=6" node_version: ">=6"
} }
issue_5153_array_assign: {
options = {
dead_code: true,
}
input: {
var a = function*() {
yield b;
}(), b;
[ b ] = b = a;
console.log(a === b ? "PASS" : "FAIL");
}
expect: {
var a = function*() {
yield b;
}(), b;
[ b ] = b = a;
console.log(a === b ? "PASS" : "FAIL");
}
expect_stdout: "PASS"
node_version: ">=6"
}
issue_5153_array_var: {
options = {
dead_code: true,
}
input: {
var a = function*() {
yield b;
}(), [ b ] = b = a;
console.log(a === b ? "PASS" : "FAIL");
}
expect: {
var a = function*() {
yield b;
}(), [ b ] = b = a;
console.log(a === b ? "PASS" : "FAIL");
}
expect_stdout: "PASS"
node_version: ">=6"
}
issue_5153_object_assign: {
options = {
dead_code: true,
}
input: {
var a = {
get p() {
return b;
},
}, b;
({
p: b
} = b = a);
console.log(a === b ? "PASS" : "FAIL");
}
expect: {
var a = {
get p() {
return b;
},
}, b;
({
p: b
} = b = a);
console.log(a === b ? "PASS" : "FAIL");
}
expect_stdout: "PASS"
node_version: ">=6"
}
issue_5153_object_var: {
options = {
dead_code: true,
}
input: {
var a = {
get p() {
return b;
},
}, {
p: b
} = b = a;
console.log(a === b ? "PASS" : "FAIL");
}
expect: {
var a = {
get p() {
return b;
},
}, {
p: b
} = b = a;
console.log(a === b ? "PASS" : "FAIL");
}
expect_stdout: "PASS"
node_version: ">=6"
}