diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2021-09-06 18:33:23 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-07 01:33:23 +0800 |
commit | 4b88dfb8d9ea5d5d25649edbce2def4b1df6c553 (patch) | |
tree | 28c5b3a4ceb6dcd7890c6ab3ac8d940b01b5e0a6 | |
parent | c3aef2361458941a36d217cb3181ade3b777a37e (diff) | |
download | tracifyjs-4b88dfb8d9ea5d5d25649edbce2def4b1df6c553.tar.gz tracifyjs-4b88dfb8d9ea5d5d25649edbce2def4b1df6c553.zip |
tweak test & warnings (#5123)
closes #5116
closes #5117
closes #5122
-rw-r--r-- | lib/compress.js | 15 | ||||
-rw-r--r-- | test/mocha/reduce.js | 63 |
2 files changed, 40 insertions, 38 deletions
diff --git a/lib/compress.js b/lib/compress.js index 91aee404..1c4df6cb 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -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); diff --git a/test/mocha/reduce.js b/test/mocha/reduce.js index 8d7e72a5..abe4e782 100644 --- a/test/mocha/reduce.js +++ b/test/mocha/reduce.js @@ -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; |