diff --git a/lib/compress.js b/lib/compress.js index a7ceaf3e..09b725b1 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -13048,6 +13048,7 @@ Compressor.prototype.compress = function(node) { return true; })) return; var sym = def.orig[0]; + if (sym instanceof AST_SymbolCatch) return; var ref = make_node(AST_SymbolRef, sym, flatten_var(sym)); ref.definition().references.push(ref); body.push(make_node(AST_SimpleStatement, sym, { diff --git a/test/compress/ie.js b/test/compress/ie.js index c275c88b..284a8ccc 100644 --- a/test/compress/ie.js +++ b/test/compress/ie.js @@ -3192,3 +3192,219 @@ issue_5081_property_access_ie: { } expect_stdout: "PASS" } + +issue_5269_1: { + options = { + ie: false, + inline: true, + toplevel: true, + } + input: { + "use strict"; + do { + (function() { + try { + throw "PASS"; + } catch (e) { + console.log(e); + } + })(); + } while (!console); + } + expect: { + "use strict"; + do { + try { + throw "PASS"; + } catch (e) { + console.log(e); + } + } while (!console); + } + expect_stdout: "PASS" +} + +issue_5269_1_ie: { + options = { + ie: true, + inline: true, + toplevel: true, + } + input: { + "use strict"; + do { + (function() { + try { + throw "PASS"; + } catch (e) { + console.log(e); + } + })(); + } while (!console); + } + expect: { + "use strict"; + do { + try { + throw "PASS"; + } catch (e) { + console.log(e); + } + } while (!console); + } + expect_stdout: "PASS" +} + +issue_5269_2: { + options = { + ie: false, + inline: true, + toplevel: true, + } + input: { + for (var i = 0; i < 2; i++) + (function() { + console.log(e); + try { + console; + } catch (e) { + var e = "FAIL 1"; + } + e = "FAIL 2"; + console; + })(); + } + expect: { + for (var i = 0; i < 2; i++) { + e = void 0; + console.log(e); + try { + console; + } catch (e) { + var e = "FAIL 1"; + } + e = "FAIL 2"; + console; + } + } + expect_stdout: [ + "undefined", + "undefined", + ] +} + +issue_5269_2_ie: { + options = { + ie: true, + inline: true, + toplevel: true, + } + input: { + for (var i = 0; i < 2; i++) + (function() { + console.log(e); + try { + console; + } catch (e) { + var e = "FAIL 1"; + } + e = "FAIL 2"; + console; + })(); + } + expect: { + for (var i = 0; i < 2; i++) { + e = void 0; + console.log(e); + try { + console; + } catch (e) { + var e = "FAIL 1"; + } + e = "FAIL 2"; + console; + } + } + expect_stdout: [ + "undefined", + "undefined", + ] +} + +issue_5269_3: { + options = { + ie: false, + inline: true, + toplevel: true, + } + input: { + e = "foo"; + for (var i = 0; i < 2; i++) + (function() { + console.log(e); + try { + console; + } catch (e) { + e = "FAIL"; + } + e = "bar"; + console; + })(); + } + expect: { + e = "foo"; + for (var i = 0; i < 2; i++) { + console.log(e); + try { + console; + } catch (e) { + e = "FAIL"; + } + e = "bar"; + console; + } + } + expect_stdout: [ + "foo", + "bar", + ] +} + +issue_5269_3_ie: { + options = { + ie: true, + inline: true, + toplevel: true, + } + input: { + e = "foo"; + for (var i = 0; i < 2; i++) + (function() { + console.log(e); + try { + console; + } catch (e) { + e = "FAIL"; + } + e = "bar"; + console; + })(); + } + expect: { + e = "foo"; + for (var i = 0; i < 2; i++) { + console.log(e); + try { + console; + } catch (e) { + e = "FAIL"; + } + e = "bar"; + console; + } + } + expect_stdout: [ + "foo", + "bar", + ] +}