diff options
-rw-r--r-- | lib/compress.js | 2 | ||||
-rw-r--r-- | test/compress/collapse_vars.js | 42 |
2 files changed, 43 insertions, 1 deletions
diff --git a/lib/compress.js b/lib/compress.js index 77f5d47c..70dafe99 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -3635,7 +3635,7 @@ merge(Compressor.prototype, { return !this.is_declared(compressor); }); def(AST_Try, function(compressor) { - return this.bcatch ? this.bcatch.may_throw(compressor) : any(this.body, compressor) + return (this.bcatch ? this.bcatch.may_throw(compressor) : any(this.body, compressor)) || this.bfinally && this.bfinally.may_throw(compressor); }); def(AST_Unary, function(compressor) { diff --git a/test/compress/collapse_vars.js b/test/compress/collapse_vars.js index edb5d57f..796fdb3f 100644 --- a/test/compress/collapse_vars.js +++ b/test/compress/collapse_vars.js @@ -7422,3 +7422,45 @@ issue_3641: { } expect_stdout: "foo undefined" } + +issue_3651: { + options = { + collapse_vars: true, + toplevel: true, + } + input: { + var a, b = "PASS"; + try { + a = function() { + try { + var c = 1; + while (0 < --c); + } catch (e) {} finally { + throw 42; + } + }(); + b = "FAIL"; + a.p; + } catch (e) { + console.log(b); + } + } + expect: { + var a, b = "PASS"; + try { + a = function() { + try { + var c = 1; + while (0 < --c); + } catch (e) {} finally { + throw 42; + } + }(); + b = "FAIL"; + a.p; + } catch (e) { + console.log(b); + } + } + expect_stdout: "PASS" +} |