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) {
}
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"
+}