fix corner case in `sequences` (#3350)
authorAlex Lam S.L <alexlamsl@gmail.com>
Wed, 20 Mar 2019 06:54:26 +0000 (14:54 +0800)
committerGitHub <noreply@github.com>
Wed, 20 Mar 2019 06:54:26 +0000 (14:54 +0800)
lib/compress.js
test/compress/sequences.js

index 72f8e63..b371aad 100644 (file)
@@ -4080,12 +4080,10 @@ merge(Compressor.prototype, {
         def(AST_ObjectProperty, function(compressor, first_in_statement) {
             return this.value.drop_side_effect_free(compressor, first_in_statement);
         });
-        def(AST_Sequence, function(compressor) {
-            var last = this.tail_node();
-            var expr = last.drop_side_effect_free(compressor);
-            if (expr === last) return this;
-            var expressions = this.expressions.slice(0, -1);
-            if (expr) expressions.push(expr);
+        def(AST_Sequence, function(compressor, first_in_statement) {
+            var expressions = trim(this.expressions, compressor, first_in_statement);
+            if (expressions === this.expressions) return this;
+            if (!expressions) return null;
             return make_sequence(this, expressions);
         });
         def(AST_Sub, function(compressor, first_in_statement) {
index 79b176e..0670ab5 100644 (file)
@@ -924,14 +924,14 @@ call: {
         b.c = function() {
             console.log(this === b ? "bar" : "baz");
         },
-        a, b(),
+        b(),
         (a, b.c)(),
-        a, function() {
+        function() {
             console.log(this === a);
         }(),
-        a, new b(),
-        a, new b.c(),
-        a, new function() {
+        new b(),
+        new b.c(),
+        new function() {
             console.log(this === a);
         }();
     }
@@ -944,3 +944,23 @@ call: {
         "false",
     ]
 }
+
+missing_link: {
+    options = {
+        conditionals: true,
+        evaluate: true,
+        sequences: true,
+    }
+    input: {
+        var a = 100;
+        a;
+        a++ + (0 ? 2 : 1);
+        console.log(a);
+    }
+    expect: {
+        var a = 100;
+        a,
+        a++,
+        console.log(a);
+    }
+}