fix corner case in collapse_vars (#4206)

fixes #4205
This commit is contained in:
Alex Lam S.L
2020-10-12 18:30:21 +01:00
committed by GitHub
parent 4d33cb2f94
commit 9272f662c0
2 changed files with 47 additions and 2 deletions

View File

@@ -1494,14 +1494,22 @@ merge(Compressor.prototype, {
}
function handle_custom_scan_order(node, tt) {
if (!(node instanceof AST_BlockScope)) return;
// Skip (non-executed) functions
if (node instanceof AST_Scope) return node;
// Stop upon collision with block-scoped variables
if (node.variables && !node.variables.all(function(def) {
return !lvalues.has(def.name);
})) {
abort = true;
return node;
}
// Scan object only in a for-in statement
if (node instanceof AST_ForIn) {
node.object = node.object.transform(tt);
abort = true;
return node;
}
// Skip (non-executed) functions
if (node instanceof AST_Scope) return node;
// Scan first case expression only in a switch statement
if (node instanceof AST_Switch) {
node.expression = node.expression.transform(tt);

View File

@@ -872,3 +872,40 @@ issue_4202: {
}
expect_stdout: "42"
}
issue_4205: {
options = {
collapse_vars: true,
}
input: {
var a = function(b) {
var c = function() {
switch (0) {
case a:
return 0;
case b:
case console.log("PASS"):
}
}();
{
const b = c;
}
}();
}
expect: {
var a = function(b) {
var c = function() {
switch (0) {
case a:
return 0;
case b:
case console.log("PASS"):
}
}();
{
const b = c;
}
}();
}
expect_stdout: true
}