@@ -1494,14 +1494,22 @@ merge(Compressor.prototype, {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function handle_custom_scan_order(node, tt) {
|
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
|
// Scan object only in a for-in statement
|
||||||
if (node instanceof AST_ForIn) {
|
if (node instanceof AST_ForIn) {
|
||||||
node.object = node.object.transform(tt);
|
node.object = node.object.transform(tt);
|
||||||
abort = true;
|
abort = true;
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
// Skip (non-executed) functions
|
|
||||||
if (node instanceof AST_Scope) return node;
|
|
||||||
// Scan first case expression only in a switch statement
|
// Scan first case expression only in a switch statement
|
||||||
if (node instanceof AST_Switch) {
|
if (node instanceof AST_Switch) {
|
||||||
node.expression = node.expression.transform(tt);
|
node.expression = node.expression.transform(tt);
|
||||||
|
|||||||
@@ -872,3 +872,40 @@ issue_4202: {
|
|||||||
}
|
}
|
||||||
expect_stdout: "42"
|
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
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user