fix corner cases in awaits (#5303)
This commit is contained in:
@@ -8055,8 +8055,16 @@ Compressor.prototype.compress = function(node) {
|
||||
if (!compressor.option("awaits")) return this;
|
||||
var exp = this.expression;
|
||||
if (!is_primitive(compressor, exp)) return this;
|
||||
if (exp instanceof AST_UnaryPrefix && exp.operator == "!") exp = exp.expression;
|
||||
var dropped = exp.drop_side_effect_free(compressor);
|
||||
if (dropped === exp) return this;
|
||||
if (!dropped) {
|
||||
dropped = make_node(AST_Number, exp, { value: 0 });
|
||||
} else if (!is_primitive(compressor, dropped)) {
|
||||
dropped = dropped.negate(compressor);
|
||||
}
|
||||
var node = this.clone();
|
||||
node.expression = exp.drop_side_effect_free(compressor) || make_node(AST_Number, this, { value: 0 });
|
||||
node.expression = dropped;
|
||||
return node;
|
||||
});
|
||||
def(AST_Binary, function(compressor, first_in_statement) {
|
||||
@@ -8400,7 +8408,8 @@ Compressor.prototype.compress = function(node) {
|
||||
if (compressor.option("awaits") && end > 0 && last instanceof AST_Await && last.expression.is_constant()) {
|
||||
expressions = expressions.slice(0, -1);
|
||||
end--;
|
||||
last.expression = expressions[end];
|
||||
var expr = expressions[end];
|
||||
last.expression = is_primitive(compressor, expr) ? expr : expr.negate(compressor);
|
||||
expressions[end] = last;
|
||||
}
|
||||
var assign, cond, lhs;
|
||||
@@ -10728,13 +10737,7 @@ Compressor.prototype.compress = function(node) {
|
||||
if (compressor.option("side_effects")) {
|
||||
var exp = self.expression;
|
||||
if (exp instanceof AST_Await) return exp.optimize(compressor);
|
||||
if (exp instanceof AST_UnaryPrefix) {
|
||||
if (exp.expression instanceof AST_Await) return exp.optimize(compressor);
|
||||
if (exp.operator == "void") return make_node(AST_UnaryPrefix, self, {
|
||||
operator: "void",
|
||||
expression: make_node(AST_Await, self, { expression: exp.expression }),
|
||||
}).optimize(compressor);
|
||||
}
|
||||
if (exp instanceof AST_UnaryPrefix && exp.expression instanceof AST_Await) return exp.optimize(compressor);
|
||||
for (var level = 0, node = self, parent; parent = compressor.parent(level++); node = parent) {
|
||||
if (is_arrow(parent)) {
|
||||
if (parent.value === node) return exp.optimize(compressor);
|
||||
|
||||
Reference in New Issue
Block a user