@@ -4906,20 +4906,39 @@ merge(Compressor.prototype, {
|
||||
var consequent = this.consequent.drop_side_effect_free(compressor);
|
||||
var alternative = this.alternative.drop_side_effect_free(compressor);
|
||||
if (consequent === this.consequent && alternative === this.alternative) return this;
|
||||
if (!consequent) return alternative ? make_node(AST_Binary, this, {
|
||||
operator: "||",
|
||||
left: this.condition,
|
||||
right: alternative
|
||||
}) : this.condition.drop_side_effect_free(compressor);
|
||||
if (!alternative) return make_node(AST_Binary, this, {
|
||||
operator: "&&",
|
||||
left: this.condition,
|
||||
right: consequent
|
||||
});
|
||||
var node = this.clone();
|
||||
node.consequent = consequent;
|
||||
node.alternative = alternative;
|
||||
return node;
|
||||
var exprs;
|
||||
if (compressor.option("ie8")) {
|
||||
exprs = [];
|
||||
if (consequent instanceof AST_Function) {
|
||||
exprs.push(consequent);
|
||||
consequent = null;
|
||||
}
|
||||
if (alternative instanceof AST_Function) {
|
||||
exprs.push(alternative);
|
||||
alternative = null;
|
||||
}
|
||||
}
|
||||
var node;
|
||||
if (!consequent) {
|
||||
node = alternative ? make_node(AST_Binary, this, {
|
||||
operator: "||",
|
||||
left: this.condition,
|
||||
right: alternative
|
||||
}) : this.condition.drop_side_effect_free(compressor);
|
||||
} else if (!alternative) {
|
||||
node = make_node(AST_Binary, this, {
|
||||
operator: "&&",
|
||||
left: this.condition,
|
||||
right: consequent
|
||||
});
|
||||
} else {
|
||||
node = this.clone();
|
||||
node.consequent = consequent;
|
||||
node.alternative = alternative;
|
||||
}
|
||||
if (!compressor.option("ie8")) return node;
|
||||
if (node) exprs.push(node);
|
||||
return make_sequence(this, exprs);
|
||||
});
|
||||
def(AST_Constant, return_null);
|
||||
def(AST_Dot, function(compressor, first_in_statement) {
|
||||
|
||||
@@ -2420,3 +2420,28 @@ issue_3750: {
|
||||
}
|
||||
expect_stdout: "PASS"
|
||||
}
|
||||
|
||||
issue_3823: {
|
||||
options = {
|
||||
ie8: true,
|
||||
toplevel: true,
|
||||
unused: true,
|
||||
}
|
||||
input: {
|
||||
for (var i = 0; i < 1; i++) {
|
||||
var a = a ? function f() {
|
||||
f;
|
||||
} : 0;
|
||||
console.log("PASS", typeof f);
|
||||
}
|
||||
}
|
||||
expect: {
|
||||
for (var i = 0; i < 1; i++) {
|
||||
(function f() {
|
||||
f;
|
||||
});
|
||||
console.log("PASS", typeof f);
|
||||
}
|
||||
}
|
||||
expect_stdout: "PASS undefined"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user