aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2021-09-06 18:33:23 +0100
committerGitHub <noreply@github.com>2021-09-07 01:33:23 +0800
commit4b88dfb8d9ea5d5d25649edbce2def4b1df6c553 (patch)
tree28c5b3a4ceb6dcd7890c6ab3ac8d940b01b5e0a6
parentc3aef2361458941a36d217cb3181ade3b777a37e (diff)
downloadtracifyjs-4b88dfb8d9ea5d5d25649edbce2def4b1df6c553.tar.gz
tracifyjs-4b88dfb8d9ea5d5d25649edbce2def4b1df6c553.zip
tweak test & warnings (#5123)
closes #5116 closes #5117 closes #5122
-rw-r--r--lib/compress.js15
-rw-r--r--test/mocha/reduce.js63
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;