@@ -3924,10 +3924,20 @@ merge(Compressor.prototype, {
|
|||||||
return self;
|
return self;
|
||||||
|
|
||||||
function can_flatten_args(fn) {
|
function can_flatten_args(fn) {
|
||||||
var scope = compressor.find_parent(AST_Scope);
|
var scope, level = 0;
|
||||||
|
var catches = Object.create(null);
|
||||||
|
do {
|
||||||
|
scope = compressor.parent(level++);
|
||||||
|
if (scope instanceof AST_Catch) {
|
||||||
|
catches[scope.argname.name] = true;
|
||||||
|
}
|
||||||
|
} while (!(scope instanceof AST_Scope));
|
||||||
var safe_to_inject = compressor.toplevel.vars || !(scope instanceof AST_Toplevel);
|
var safe_to_inject = compressor.toplevel.vars || !(scope instanceof AST_Toplevel);
|
||||||
return all(fn.argnames, function(arg) {
|
return all(fn.argnames, function(arg) {
|
||||||
return arg.__unused || safe_to_inject && !scope.var_names()[arg.name];
|
return arg.__unused
|
||||||
|
|| safe_to_inject
|
||||||
|
&& !catches[arg.name]
|
||||||
|
&& !scope.var_names()[arg.name];
|
||||||
}) && scope;
|
}) && scope;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -847,3 +847,79 @@ issue_2601_2: {
|
|||||||
}
|
}
|
||||||
expect_stdout: "PASS"
|
expect_stdout: "PASS"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
issue_2604_1: {
|
||||||
|
options = {
|
||||||
|
inline: true,
|
||||||
|
side_effects: true,
|
||||||
|
unused: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
var a = "FAIL";
|
||||||
|
(function() {
|
||||||
|
try {
|
||||||
|
throw 1;
|
||||||
|
} catch (b) {
|
||||||
|
(function f(b) {
|
||||||
|
b && b();
|
||||||
|
})();
|
||||||
|
b && (a = "PASS");
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
console.log(a);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
var a = "FAIL";
|
||||||
|
(function() {
|
||||||
|
try {
|
||||||
|
throw 1;
|
||||||
|
} catch (b) {
|
||||||
|
(function(b) {
|
||||||
|
b && b();
|
||||||
|
})();
|
||||||
|
b && (a = "PASS");
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
console.log(a);
|
||||||
|
}
|
||||||
|
expect_stdout: "PASS"
|
||||||
|
}
|
||||||
|
|
||||||
|
issue_2604_2: {
|
||||||
|
rename = true
|
||||||
|
options = {
|
||||||
|
evaluate: true,
|
||||||
|
inline: true,
|
||||||
|
passes: 3,
|
||||||
|
reduce_vars: true,
|
||||||
|
side_effects: true,
|
||||||
|
unused: true,
|
||||||
|
}
|
||||||
|
mangle = {}
|
||||||
|
input: {
|
||||||
|
var a = "FAIL";
|
||||||
|
(function() {
|
||||||
|
try {
|
||||||
|
throw 1;
|
||||||
|
} catch (b) {
|
||||||
|
(function f(b) {
|
||||||
|
b && b();
|
||||||
|
})();
|
||||||
|
b && (a = "PASS");
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
console.log(a);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
var a = "FAIL";
|
||||||
|
(function() {
|
||||||
|
try {
|
||||||
|
throw 1;
|
||||||
|
} catch (o) {
|
||||||
|
o && (a = "PASS");
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
console.log(a);
|
||||||
|
}
|
||||||
|
expect_stdout: "PASS"
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user