Compress conditions that have side effects using sequences
This commit is contained in:
@@ -2322,11 +2322,15 @@ merge(Compressor.prototype, {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
// x=y?1:1 --> x=1
|
// x=y?1:1 --> x=1
|
||||||
if (!self.condition.has_side_effects(compressor)
|
if (consequent instanceof AST_Constant
|
||||||
&& consequent instanceof AST_Constant
|
|
||||||
&& alternative instanceof AST_Constant
|
&& alternative instanceof AST_Constant
|
||||||
&& consequent.equivalent_to(alternative)) {
|
&& consequent.equivalent_to(alternative)) {
|
||||||
return make_node_from_constant(compressor, consequent.value, self);
|
if (self.condition.has_side_effects(compressor)) {
|
||||||
|
return AST_Seq.from_array([self.condition, make_node_from_constant(compressor, consequent.value, self)]);
|
||||||
|
} else {
|
||||||
|
return make_node_from_constant(compressor, consequent.value, self);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -258,30 +258,38 @@ cond_7: {
|
|||||||
|
|
||||||
x = y ? 'foo' : y ? 'foo' : 'fo'+'o';
|
x = y ? 'foo' : y ? 'foo' : 'fo'+'o';
|
||||||
|
|
||||||
|
// Compress conditions that have side effects
|
||||||
|
if (condition()) {
|
||||||
|
x = 10+10;
|
||||||
|
} else {
|
||||||
|
x = 20;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (z) {
|
||||||
|
x = 'fuji';
|
||||||
|
} else if (condition()) {
|
||||||
|
x = 'fu'+'ji';
|
||||||
|
} else {
|
||||||
|
x = 'fuji';
|
||||||
|
}
|
||||||
|
|
||||||
|
x = condition() ? 'foobar' : 'foo'+'bar';
|
||||||
|
|
||||||
// don't compress these
|
// don't compress these
|
||||||
x = y ? a : b;
|
x = y ? a : b;
|
||||||
|
|
||||||
x = y ? 'foo' : 'fo';
|
x = y ? 'foo' : 'fo';
|
||||||
|
|
||||||
// make sure not to mess with conditions that have side effects
|
|
||||||
// TODO: Make sure to mess with conditions that have side effects... proprely
|
|
||||||
if (some_condition()) {
|
|
||||||
x = 1+1;
|
|
||||||
} else {
|
|
||||||
x = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
x = some_condition() ? 'foo' : 'fo'+'o';
|
|
||||||
}
|
}
|
||||||
expect: {
|
expect: {
|
||||||
x = 2;
|
x = 2;
|
||||||
x = 2;
|
x = 2;
|
||||||
x = 'foo';
|
x = 'foo';
|
||||||
x = 'foo';
|
x = 'foo';
|
||||||
|
x = (condition(), 20);
|
||||||
|
x = z ? 'fuji' : (condition(), 'fuji');
|
||||||
|
x = (condition(), 'foobar');
|
||||||
x = y ? a : b;
|
x = y ? a : b;
|
||||||
x = y ? 'foo' : 'fo';
|
x = y ? 'foo' : 'fo';
|
||||||
x = some_condition() ? 2 : 2;
|
|
||||||
x = some_condition() ? 'foo' : 'foo';
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user