enhance if_return (#4164)

This commit is contained in:
Alex Lam S.L
2020-10-02 09:10:25 +01:00
committed by GitHub
parent 090ee895e1
commit 47a5e6e17a
3 changed files with 102 additions and 8 deletions

View File

@@ -2150,7 +2150,9 @@ merge(Compressor.prototype, {
function handle_if_return(statements, compressor) {
var self = compressor.self();
var parent = compressor.parent();
var in_lambda = self instanceof AST_Lambda;
var in_lambda = last_of(function(node) {
return node 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;) {
@@ -2253,7 +2255,7 @@ merge(Compressor.prototype, {
}
//---
// if (foo()) return x; return y; => return foo() ? x : y;
if ((in_bool || value) && !stat.alternative && next instanceof AST_Return) {
if (!stat.alternative && next instanceof AST_Return) {
CHANGED = true;
stat = stat.clone();
stat.alternative = next;
@@ -2323,14 +2325,21 @@ merge(Compressor.prototype, {
return true;
}
function match_target(target) {
function last_of(predicate) {
var block = self, stat, level = 0;
do {
do {
if (block === target) return true;
if (predicate(block)) return true;
block = compressor.parent(level++);
} while (block instanceof AST_If && (stat = block));
} while (block instanceof AST_BlockStatement && is_last_statement(block.body, stat));
} while ((block instanceof AST_BlockStatement || block instanceof AST_Scope)
&& is_last_statement(block.body, stat));
}
function match_target(target) {
return last_of(function(node) {
return node === target;
});
}
function can_merge_flow(ab) {