@@ -914,7 +914,7 @@ merge(Compressor.prototype, {
|
|||||||
|
|
||||||
function tighten_body(statements, compressor) {
|
function tighten_body(statements, compressor) {
|
||||||
var scope = compressor.find_parent(AST_Scope);
|
var scope = compressor.find_parent(AST_Scope);
|
||||||
var in_loop = is_in_loop();
|
var in_loop = is_in_node(AST_IterationStatement);
|
||||||
var CHANGED, max_iter = 10;
|
var CHANGED, max_iter = 10;
|
||||||
do {
|
do {
|
||||||
CHANGED = false;
|
CHANGED = false;
|
||||||
@@ -937,9 +937,10 @@ merge(Compressor.prototype, {
|
|||||||
}
|
}
|
||||||
} while (CHANGED && max_iter-- > 0);
|
} while (CHANGED && max_iter-- > 0);
|
||||||
|
|
||||||
function is_in_loop() {
|
function is_in_node(type) {
|
||||||
|
if (compressor.self() instanceof type) return true;
|
||||||
for (var node, level = 0; node = compressor.parent(level); level++) {
|
for (var node, level = 0; node = compressor.parent(level); level++) {
|
||||||
if (node instanceof AST_IterationStatement) return true;
|
if (node instanceof type) return true;
|
||||||
if (node instanceof AST_Scope) break;
|
if (node instanceof AST_Scope) break;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -957,7 +958,7 @@ merge(Compressor.prototype, {
|
|||||||
if (scope.uses_eval || scope.uses_with) return statements;
|
if (scope.uses_eval || scope.uses_with) return statements;
|
||||||
var args;
|
var args;
|
||||||
var candidates = [];
|
var candidates = [];
|
||||||
var in_try = compressor.self() instanceof AST_Try;
|
var in_try = is_in_node(AST_Try);
|
||||||
var stat_index = statements.length;
|
var stat_index = statements.length;
|
||||||
var scanner = new TreeTransformer(function(node, descend) {
|
var scanner = new TreeTransformer(function(node, descend) {
|
||||||
if (abort) return node;
|
if (abort) return node;
|
||||||
|
|||||||
@@ -4665,3 +4665,38 @@ issue_2931: {
|
|||||||
}
|
}
|
||||||
expect_stdout: "undefined"
|
expect_stdout: "undefined"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
issue_2954: {
|
||||||
|
options = {
|
||||||
|
collapse_vars: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
var a = "PASS", b;
|
||||||
|
try {
|
||||||
|
do {
|
||||||
|
b = function() {
|
||||||
|
throw 0;
|
||||||
|
}();
|
||||||
|
a = "FAIL";
|
||||||
|
b && b.c;
|
||||||
|
} while (0);
|
||||||
|
} catch (e) {
|
||||||
|
}
|
||||||
|
console.log(a);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
var a = "PASS", b;
|
||||||
|
try {
|
||||||
|
do {
|
||||||
|
b = function() {
|
||||||
|
throw 0;
|
||||||
|
}();
|
||||||
|
a = "FAIL";
|
||||||
|
b && b.c;
|
||||||
|
} while (0);
|
||||||
|
} catch (e) {
|
||||||
|
}
|
||||||
|
console.log(a);
|
||||||
|
}
|
||||||
|
expect_stdout: "PASS"
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user