enhance if_return (#3560)
This commit is contained in:
@@ -1749,9 +1749,7 @@ merge(Compressor.prototype, {
|
||||
if (stat instanceof AST_If) {
|
||||
var ab = aborts(stat.body);
|
||||
if (can_merge_flow(ab)) {
|
||||
if (ab.label) {
|
||||
remove(ab.label.thedef.references, ab);
|
||||
}
|
||||
if (ab.label) remove(ab.label.thedef.references, ab);
|
||||
CHANGED = true;
|
||||
stat = stat.clone();
|
||||
stat.condition = stat.condition.negate(compressor);
|
||||
@@ -1779,23 +1777,34 @@ merge(Compressor.prototype, {
|
||||
}
|
||||
}
|
||||
|
||||
var ab = aborts(stat.alternative);
|
||||
if (can_merge_flow(ab)) {
|
||||
if (ab.label) {
|
||||
remove(ab.label.thedef.references, ab);
|
||||
}
|
||||
var alt = aborts(stat.alternative);
|
||||
if (can_merge_flow(alt)) {
|
||||
if (alt.label) remove(alt.label.thedef.references, alt);
|
||||
CHANGED = true;
|
||||
stat = stat.clone();
|
||||
stat.body = make_node(AST_BlockStatement, stat.body, {
|
||||
body: as_statement_array(stat.body).concat(extract_functions())
|
||||
});
|
||||
var body = as_statement_array_with_return(stat.alternative, ab);
|
||||
var body = as_statement_array_with_return(stat.alternative, alt);
|
||||
stat.alternative = make_node(AST_BlockStatement, stat.alternative, {
|
||||
body: body
|
||||
});
|
||||
statements[i] = stat.transform(compressor);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (compressor.option("typeofs")) {
|
||||
if (ab && !alt) {
|
||||
mark_locally_defined(stat.condition, null, make_node(AST_BlockStatement, self, {
|
||||
body: statements.slice(i + 1)
|
||||
}));
|
||||
}
|
||||
if (!ab && alt) {
|
||||
mark_locally_defined(stat.condition, make_node(AST_BlockStatement, self, {
|
||||
body: statements.slice(i + 1)
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (stat instanceof AST_If && stat.body instanceof AST_Return) {
|
||||
@@ -1940,9 +1949,7 @@ merge(Compressor.prototype, {
|
||||
&& loop_body(lct) === self
|
||||
|| stat instanceof AST_Continue
|
||||
&& loop_body(lct) === self) {
|
||||
if (stat.label) {
|
||||
remove(stat.label.thedef.references, stat);
|
||||
}
|
||||
if (stat.label) remove(stat.label.thedef.references, stat);
|
||||
} else {
|
||||
statements[n++] = stat;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user