remove hack in collapse_vars (#2457)

fixes #2456
This commit is contained in:
Alex Lam S.L
2017-11-09 20:00:58 +08:00
committed by GitHub
parent 4c0b0177b6
commit 246d9d4e83
2 changed files with 33 additions and 2 deletions

View File

@@ -1062,7 +1062,7 @@ merge(Compressor.prototype, {
var found = false; var found = false;
return statements[stat_index].transform(new TreeTransformer(function(node, descend, in_list) { return statements[stat_index].transform(new TreeTransformer(function(node, descend, in_list) {
if (found) return node; if (found) return node;
if (node === expr) { if (node === expr || node.body === expr) {
found = true; found = true;
if (node instanceof AST_VarDef) { if (node instanceof AST_VarDef) {
drop_decl(node.name.definition()); drop_decl(node.name.definition());
@@ -1076,7 +1076,6 @@ merge(Compressor.prototype, {
case 0: return null; case 0: return null;
case 1: return node.expressions[0]; case 1: return node.expressions[0];
} }
if (node instanceof AST_SimpleStatement && !node.body) return null;
})); }));
} }

View File

@@ -297,4 +297,36 @@ describe("minify", function() {
assert.strictEqual(result.code, "alert({bar:42});"); assert.strictEqual(result.code, "alert({bar:42});");
}); });
}); });
describe("collapse_vars", function() {
it("Should not produce invalid AST", function() {
var code = [
"function f(a) {",
" a = x();",
" return a;",
"}",
"f();",
].join("\n");
var ast = Uglify.minify(code, {
compress: false,
mangle: false,
output: {
ast: true
},
}).ast;
assert.strictEqual(ast.TYPE, "Toplevel");
assert.strictEqual(ast.body.length, 2);
assert.strictEqual(ast.body[0].TYPE, "Defun");
assert.strictEqual(ast.body[0].body.length, 2);
assert.strictEqual(ast.body[0].body[0].TYPE, "SimpleStatement");
var stat = ast.body[0].body[0];
Uglify.minify(ast, {
compress: {
sequences: false
}
});
assert.ok(stat.body);
assert.strictEqual(stat.print_to_string(), "a=x()");
});
});
}); });