diff --git a/lib/compress.js b/lib/compress.js index 69c954b3..a26590a6 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -6161,15 +6161,8 @@ Compressor.prototype.compress = function(node) { return true; } if (node instanceof AST_Scope) { - var in_iife = false; - if (node instanceof AST_LambdaExpression && !node.name && !is_async(node) && !is_generator(node)) { - var parent = tw.parent(); - in_iife = parent && parent.TYPE == "Call" && parent.expression === node; - } - if (!in_iife) { - push(); - segment.block = node; - } + push(); + segment.block = node; if (node === self) root = segment; if (node instanceof AST_Lambda) { if (node.name) references[node.name.definition().id] = false; @@ -6186,7 +6179,7 @@ Compressor.prototype.compress = function(node) { in_arg.pop(); } walk_lambda(node, tw); - if (!in_iife) pop(); + pop(); return true; } if (node instanceof AST_Sub) { diff --git a/test/compress/arrows.js b/test/compress/arrows.js index 1d43df14..9691648e 100644 --- a/test/compress/arrows.js +++ b/test/compress/arrows.js @@ -726,8 +726,8 @@ issue_4401: { expect: { (function() { var a = (b => b(a))(console.log || a); - var a = console.log; - a && a(typeof b); + var c = console.log; + c && c(typeof b); })(); } expect_stdout: [ diff --git a/test/compress/awaits.js b/test/compress/awaits.js index 2447b390..c527cc07 100644 --- a/test/compress/awaits.js +++ b/test/compress/awaits.js @@ -2986,15 +2986,15 @@ issue_5456: { var a = true; (function() { b = (i = a, console.log("foo") && i), - i = async function() { + d = async function() { c = await null; }(), e = function() { - if (c) console.log(typeof i); + if (c) console.log(typeof d); while (b); }(), void 0; - var b, c, i, e; + var b, c, d, e; var i; })(); } diff --git a/test/compress/merge_vars.js b/test/compress/merge_vars.js index d6e95dec..7082491e 100644 --- a/test/compress/merge_vars.js +++ b/test/compress/merge_vars.js @@ -3754,3 +3754,94 @@ issue_5451: { } expect_stdout: "0" } + +issue_5471_1: { + options = { + conditionals: true, + inline: true, + merge_vars: true, + reduce_vars: true, + sequences: true, + side_effects: true, + toplevel: true, + unused: true, + } + input: { + var a = "FAIL 1"; + function f(b, c) { + function g() { + if (console) + return 42; + else + c = "FAIL 2"; + } + var d = g(); + console.log(c || "PASS"); + var e = function h() { + while (b && e); + }(); + } + f(a++) && a; + } + expect: { + var a = "FAIL 1"; + var b, c, e; + b = +a, + function() { + if (console) + return; + c = "FAIL 2"; + }(), + console.log(c || "PASS"), + e = function() { + while (b && e); + }(); + } + expect_stdout: "PASS" +} + +issue_5471_2: { + options = { + conditionals: true, + evaluate: true, + inline: true, + merge_vars: true, + reduce_vars: true, + sequences: true, + toplevel: true, + unused: true, + } + input: { + var a = "FAIL 1"; + function f(b, c) { + function g() { + if (console) + return 42; + else + c = "FAIL 2"; + } + var d = g(); + console.log(c || "PASS"); + var e = function h() { + while (b && e); + }(); + } + f(a++) && a; + } + expect: { + var a = "FAIL 1"; + var b, c, e; + b = +a, + function() { + if (console) + return; + c = "FAIL 2"; + }(), + console.log(c || "PASS"), + e = function() { + while (b && e); + }(), + void 0; + } + expect_stdout: "PASS" +} diff --git a/test/compress/yields.js b/test/compress/yields.js index 0ccfaf12..64e0a796 100644 --- a/test/compress/yields.js +++ b/test/compress/yields.js @@ -1574,15 +1574,15 @@ issue_5456: { var a = true; (function() { b = (i = a, console.log("foo") && i), - i = function*() { + d = function*() { c = null; }(), e = function() { - if (c) console.log(typeof i); + if (c) console.log(typeof d); while (b); }(), void 0; - var b, c, i, e; + var b, c, d, e; var i; })(); }