}
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;
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);
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);
});
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;