aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/compress.js2
-rw-r--r--test/compress/collapse_vars.js42
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"
+}