tweak test & warnings (#5123)
authorAlex Lam S.L <alexlamsl@gmail.com>
Mon, 6 Sep 2021 17:33:23 +0000 (18:33 +0100)
committerGitHub <noreply@github.com>
Mon, 6 Sep 2021 17:33:23 +0000 (01:33 +0800)
closes #5116
closes #5117
closes #5122

lib/compress.js
test/mocha/reduce.js

index 91aee40..1c4df6c 100644 (file)
@@ -3716,12 +3716,8 @@ merge(Compressor.prototype, {
     }
 
     function extract_declarations_from_unreachable_code(compressor, stat, target) {
-        if (!(stat instanceof AST_DefClass
-            || stat instanceof AST_Definitions
-            || stat instanceof AST_LambdaDefinition)) {
-            AST_Node.warn("Dropping unreachable code [{file}:{line},{col}]", stat.start);
-        }
         var block;
+        var dropped = false;
         stat.walk(new TreeWalker(function(node, descend) {
             if (node instanceof AST_DefClass) {
                 node.extends = null;
@@ -3750,16 +3746,17 @@ merge(Compressor.prototype, {
                 block = [];
                 descend();
                 if (block.required) {
-                    target.push(make_node(AST_BlockStatement, stat, {
-                        body: block
-                    }));
+                    target.push(make_node(AST_BlockStatement, stat, { body: block }));
                 } else if (block.length) {
                     [].push.apply(target, block);
                 }
                 block = save;
                 return true;
             }
+            if (!(node instanceof AST_LoopControl)) dropped = true;
         }));
+        if (dropped) AST_Node.warn("Dropping unreachable code [{file}:{line},{col}]", stat.start);
+
         function push(node) {
             if (block) {
                 block.push(node);
@@ -6709,7 +6706,7 @@ merge(Compressor.prototype, {
                     if (tail.length == 0) break;
                     if (tail.length == duplicated) {
                         [].unshift.apply(side_effects, tail.map(function(def) {
-                            AST_Node.warn("Dropping duplicated definition of variable {name} [{file}:{line},{col}]", template(def.name));
+                            AST_Node.info("Dropping duplicated definition of variable {name} [{file}:{line},{col}]", template(def.name));
                             var sym = def.name.definition();
                             var ref = make_node(AST_SymbolRef, def.name, def.name);
                             sym.references.push(ref);
index 8d7e72a..abe4e78 100644 (file)
@@ -282,35 +282,40 @@ describe("test/reduce.js", function() {
         });
         if (result.error) throw result.error;
         assert.deepEqual(result.warnings, []);
-        assert.strictEqual(result.code.replace(/function \(/g, "function("), (semver.satisfies(process.version, "<=0.10") ? [
-            "// Can't reproduce test failure",
-            "// minify options: {",
-            '//   "compress": false,',
-            '//   "mangle": false,',
-            '//   "output": {',
-            '//     "beautify": true',
-            "//   }",
-            "// }",
-        ] : [
-            [
-                "try{",
-                "null[function(){}]",
-                "}catch(e){",
-                "console.log(e)",
-                "}",
-            ].join(""),
-            "// output: TypeError: Cannot read property 'function(){}' of null",
-            "// ",
-            "// minify: TypeError: Cannot read property 'function() {}' of null",
-            "// ",
-            "// options: {",
-            '//   "compress": false,',
-            '//   "mangle": false,',
-            '//   "output": {',
-            '//     "beautify": true',
-            "//   }",
-            "// }",
-        ]).join("\n"));
+        if (semver.satisfies(process.version, "<=0.10")) {
+            assert.strictEqual(result.code, [
+                "// Can't reproduce test failure",
+                "// minify options: {",
+                '//   "compress": false,',
+                '//   "mangle": false,',
+                '//   "output": {',
+                '//     "beautify": true',
+                "//   }",
+                "// }",
+            ].join("\n"));
+        } else {
+            var message = result.code.split(/\n/, 3)[1].slice("// output: ".length);
+            assert.strictEqual(result.code, [
+                [
+                    "try{",
+                    "null[function(){}]",
+                    "}catch(e){",
+                    "console.log(e)",
+                    "}",
+                ].join(""),
+                "// output: " + message,
+                "// ",
+                "// minify: " + message.replace("(){}", "() {}"),
+                "// ",
+                "// options: {",
+                '//   "compress": false,',
+                '//   "mangle": false,',
+                '//   "output": {',
+                '//     "beautify": true',
+                "//   }",
+                "// }",
+            ].join("\n"));
+        }
     });
     it("Should maintain block-scope for const/let", function() {
         if (semver.satisfies(process.version, "<4")) return;