@@ -3804,6 +3804,8 @@ merge(Compressor.prototype, {
|
|||||||
if (fn.evaluating) return this;
|
if (fn.evaluating) return this;
|
||||||
if (fn.name && fn.name.definition().recursive_refs > 0) return this;
|
if (fn.name && fn.name.definition().recursive_refs > 0) return this;
|
||||||
if (this.is_expr_pure(compressor)) return this;
|
if (this.is_expr_pure(compressor)) return this;
|
||||||
|
var args = eval_args(this.args);
|
||||||
|
if (!args && !ignore_side_effects) return this;
|
||||||
var stat = fn.first_statement();
|
var stat = fn.first_statement();
|
||||||
if (!(stat instanceof AST_Return)) {
|
if (!(stat instanceof AST_Return)) {
|
||||||
if (ignore_side_effects) {
|
if (ignore_side_effects) {
|
||||||
@@ -3811,7 +3813,9 @@ merge(Compressor.prototype, {
|
|||||||
fn.walk(new TreeWalker(function(node) {
|
fn.walk(new TreeWalker(function(node) {
|
||||||
if (found) return true;
|
if (found) return true;
|
||||||
if (node instanceof AST_Return) {
|
if (node instanceof AST_Return) {
|
||||||
if (node.value && node.value.evaluate(compressor, true) !== undefined) found = true;
|
if (node.value && node.value._eval(compressor, true, cached, depth) !== undefined) {
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (node instanceof AST_Scope && node !== fn) return true;
|
if (node instanceof AST_Scope && node !== fn) return true;
|
||||||
@@ -3820,8 +3824,6 @@ merge(Compressor.prototype, {
|
|||||||
}
|
}
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
var args = eval_args(this.args);
|
|
||||||
if (!args && !ignore_side_effects) return this;
|
|
||||||
var val = stat.value;
|
var val = stat.value;
|
||||||
if (!val) return;
|
if (!val) return;
|
||||||
var cached_args = [];
|
var cached_args = [];
|
||||||
|
|||||||
@@ -3014,3 +3014,36 @@ issue_4119_4: {
|
|||||||
}
|
}
|
||||||
expect_stdout: "PASS"
|
expect_stdout: "PASS"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
issue_4214: {
|
||||||
|
options = {
|
||||||
|
evaluate: true,
|
||||||
|
reduce_vars: true,
|
||||||
|
toplevel: true,
|
||||||
|
unused: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
function f(a) {
|
||||||
|
return function() {
|
||||||
|
try {
|
||||||
|
return a;
|
||||||
|
} finally {
|
||||||
|
var b = 0;
|
||||||
|
}
|
||||||
|
}(a++ && this());
|
||||||
|
}
|
||||||
|
var c = f();
|
||||||
|
console.log(c);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
var c = function(a) {
|
||||||
|
return function() {
|
||||||
|
try {
|
||||||
|
return a;
|
||||||
|
} finally {}
|
||||||
|
}(a++ && this());
|
||||||
|
}();
|
||||||
|
console.log(c);
|
||||||
|
}
|
||||||
|
expect_stdout: "NaN"
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user