fix `reduce_vars` within try-block (#1818)
authorAlex Lam S.L <alexlamsl@gmail.com>
Mon, 17 Apr 2017 06:03:29 +0000 (14:03 +0800)
committerGitHub <noreply@github.com>
Mon, 17 Apr 2017 06:03:29 +0000 (14:03 +0800)
Possible partial execution due to exceptions.

lib/compress.js
test/compress/reduce_vars.js

index 640fcec..cc42c46 100644 (file)
@@ -382,7 +382,19 @@ merge(Compressor.prototype, {
                     pop();
                     return true;
                 }
-                if (node instanceof AST_Catch || node instanceof AST_SwitchBranch) {
+                if (node instanceof AST_Try) {
+                    push();
+                    walk_body(node, tw);
+                    pop();
+                    if (node.bcatch) {
+                        push();
+                        node.bcatch.walk(tw);
+                        pop();
+                    }
+                    if (node.bfinally) node.bfinally.walk(tw);
+                    return true;
+                }
+                if (node instanceof AST_SwitchBranch) {
                     push();
                     descend();
                     pop();
index 6e079c1..405dbc2 100644 (file)
@@ -2187,3 +2187,34 @@ issue_1814_2: {
     }
     expect_stdout: "0 '321'"
 }
+
+try_abort: {
+    options = {
+        evaluate: true,
+        reduce_vars: true,
+        unused: true,
+    }
+    input: {
+        !function() {
+            try {
+                var a = 1;
+                throw "";
+                var b = 2;
+            } catch (e) {
+            }
+            console.log(a, b);
+        }();
+    }
+    expect: {
+        !function() {
+            try {
+                var a = 1;
+                throw "";
+                var b = 2;
+            } catch (e) {
+            }
+            console.log(a, b);
+        }();
+    }
+    expect_stdout: "1 undefined"
+}