enhance collapse_vars (#2704)

This commit is contained in:
Alex Lam S.L
2018-01-02 18:42:15 +08:00
committed by GitHub
parent cc931b3ad8
commit 6dead95eb3
2 changed files with 16 additions and 7 deletions

View File

@@ -1159,10 +1159,10 @@ merge(Compressor.prototype, {
if (!expr.left.has_side_effects(compressor)) { if (!expr.left.has_side_effects(compressor)) {
candidates.push(hit_stack.slice()); candidates.push(hit_stack.slice());
} }
} else if (expr instanceof AST_Unary) { extract_candidates(expr.right);
if (expr.operator == "++" || expr.operator == "--") { } else if (expr instanceof AST_Binary) {
candidates.push(hit_stack.slice()); extract_candidates(expr.left);
} extract_candidates(expr.right);
} else if (expr instanceof AST_Call) { } else if (expr instanceof AST_Call) {
extract_candidates(expr.expression); extract_candidates(expr.expression);
expr.args.forEach(extract_candidates); expr.args.forEach(extract_candidates);
@@ -1187,14 +1187,22 @@ merge(Compressor.prototype, {
} else if (expr instanceof AST_Switch) { } else if (expr instanceof AST_Switch) {
extract_candidates(expr.expression); extract_candidates(expr.expression);
expr.body.forEach(extract_candidates); expr.body.forEach(extract_candidates);
} else if (expr instanceof AST_Unary) {
if (expr.operator == "++" || expr.operator == "--") {
candidates.push(hit_stack.slice());
}
} else if (expr instanceof AST_VarDef) { } else if (expr instanceof AST_VarDef) {
if (expr.value) candidates.push(hit_stack.slice()); if (expr.value) {
candidates.push(hit_stack.slice());
extract_candidates(expr.value);
}
} }
hit_stack.pop(); hit_stack.pop();
} }
function find_stop(node, level) { function find_stop(node, level) {
var parent = scanner.parent(level); var parent = scanner.parent(level);
if (parent instanceof AST_Binary) return node;
if (parent instanceof AST_Call) return node; if (parent instanceof AST_Call) return node;
if (parent instanceof AST_Case) return node; if (parent instanceof AST_Case) return node;
if (parent instanceof AST_Conditional) return node; if (parent instanceof AST_Conditional) return node;
@@ -1202,6 +1210,7 @@ merge(Compressor.prototype, {
if (parent instanceof AST_If) return node; if (parent instanceof AST_If) return node;
if (parent instanceof AST_Sequence) return find_stop(parent, level + 1); if (parent instanceof AST_Sequence) return find_stop(parent, level + 1);
if (parent instanceof AST_Switch) return node; if (parent instanceof AST_Switch) return node;
if (parent instanceof AST_VarDef) return node;
return null; return null;
} }

View File

@@ -1285,7 +1285,7 @@ issue_2630_1: {
expect: { expect: {
var c = 0; var c = 0;
(function() { (function() {
while (c++, void (c = 1 + c)); while (void (c = 1 + ++c));
})(), })(),
console.log(c); console.log(c);
} }
@@ -1316,7 +1316,7 @@ issue_2630_2: {
expect: { expect: {
var c = 0; var c = 0;
!function() { !function() {
while (c += 1, void (c = 1 + c)); while (void (c = 1 + (c += 1)));
}(), console.log(c); }(), console.log(c);
} }
expect_stdout: "2" expect_stdout: "2"