fix corner case in `switch` (#1765)
authorAlex Lam S.L <alexlamsl@gmail.com>
Sun, 2 Apr 2017 09:07:20 +0000 (17:07 +0800)
committerGitHub <noreply@github.com>
Sun, 2 Apr 2017 09:07:20 +0000 (17:07 +0800)
lib/compress.js
test/compress/issue-1750.js

index 763490a..79e7d4d 100644 (file)
@@ -2557,7 +2557,7 @@ merge(Compressor.prototype, {
                 if (!default_branch) {
                     default_branch = branch;
                 } else {
-                    eliminate_branch(branch);
+                    eliminate_branch(branch, body[body.length - 1]);
                 }
             } else if (value !== self.expression) {
                 var exp = branch.expression.evaluate(compressor);
@@ -2570,7 +2570,7 @@ merge(Compressor.prototype, {
                         default_branch = null;
                     }
                 } else if (exp !== branch.expression) {
-                    eliminate_branch(branch);
+                    eliminate_branch(branch, body[body.length - 1]);
                     continue;
                 }
             }
@@ -2583,7 +2583,7 @@ merge(Compressor.prototype, {
             }
             body.push(branch);
         }
-        while (i < len) eliminate_branch(self.body[i++]);
+        while (i < len) eliminate_branch(self.body[i++], body[body.length - 1]);
         if (body.length > 0) {
             body[0].body = decl.concat(body[0].body);
         }
@@ -2626,7 +2626,6 @@ merge(Compressor.prototype, {
         return self;
 
         function eliminate_branch(branch, prev) {
-            if (!prev) prev = body[body.length - 1];
             if (prev && !aborts(prev)) {
                 prev.body = prev.body.concat(branch.body);
             } else {
index c1448af..d18bc49 100644 (file)
@@ -24,3 +24,31 @@ case_1: {
     }
     expect_stdout: "0 2"
 }
+
+case_2: {
+    options = {
+        dead_code: true,
+        evaluate: true,
+        switches: true,
+    }
+    input: {
+        var a = 0, b = 1;
+        switch (0) {
+          default:
+            b = 2;
+          case a:
+            a = 3;
+          case 0:
+        }
+        console.log(a, b);
+    }
+    expect: {
+        var a = 0, b = 1;
+        switch (0) {
+          case a:
+            a = 3;
+        }
+        console.log(a, b);
+    }
+    expect_stdout: "3 1"
+}