enhance if_return (#3875)
This commit is contained in:
@@ -2027,8 +2027,10 @@ merge(Compressor.prototype, {
|
|||||||
|
|
||||||
function handle_if_return(statements, compressor) {
|
function handle_if_return(statements, compressor) {
|
||||||
var self = compressor.self();
|
var self = compressor.self();
|
||||||
var multiple_if_returns = has_multiple_if_returns(statements);
|
var parent = compressor.parent();
|
||||||
var in_lambda = self instanceof AST_Lambda;
|
var in_lambda = self instanceof AST_Lambda;
|
||||||
|
var in_iife = in_lambda && parent && parent.TYPE == "Call";
|
||||||
|
var multiple_if_returns = has_multiple_if_returns(statements);
|
||||||
for (var i = statements.length; --i >= 0;) {
|
for (var i = statements.length; --i >= 0;) {
|
||||||
var stat = statements[i];
|
var stat = statements[i];
|
||||||
var j = next_index(i);
|
var j = next_index(i);
|
||||||
@@ -2156,7 +2158,7 @@ merge(Compressor.prototype, {
|
|||||||
// the example code.
|
// the example code.
|
||||||
var prev = statements[prev_index(i)];
|
var prev = statements[prev_index(i)];
|
||||||
if (compressor.option("sequences") && in_lambda && !stat.alternative
|
if (compressor.option("sequences") && in_lambda && !stat.alternative
|
||||||
&& prev instanceof AST_If && prev.body instanceof AST_Return
|
&& (!prev && in_iife || prev instanceof AST_If && prev.body instanceof AST_Return)
|
||||||
&& next_index(j) == statements.length && next instanceof AST_SimpleStatement) {
|
&& next_index(j) == statements.length && next instanceof AST_SimpleStatement) {
|
||||||
CHANGED = true;
|
CHANGED = true;
|
||||||
stat = stat.clone();
|
stat = stat.clone();
|
||||||
|
|||||||
@@ -573,3 +573,24 @@ issue_3600: {
|
|||||||
}
|
}
|
||||||
expect_stdout: "1"
|
expect_stdout: "1"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
iife_if_return_simple: {
|
||||||
|
options = {
|
||||||
|
conditionals: true,
|
||||||
|
if_return: true,
|
||||||
|
inline: true,
|
||||||
|
sequences: true,
|
||||||
|
side_effects: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
(function() {
|
||||||
|
if (console)
|
||||||
|
return console.log("PASS");
|
||||||
|
console.log("FAIL");
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
console ? console.log("PASS") : console.log("FAIL");
|
||||||
|
}
|
||||||
|
expect_stdout: "PASS"
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user