fix corner cases with delete (#1796)
`delete Infinity` returns `false` where as `delete (1/0)` returns `true`
This commit is contained in:
@@ -3620,6 +3620,11 @@ merge(Compressor.prototype, {
|
|||||||
return ref;
|
return ref;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
var parent = compressor.parent();
|
||||||
|
if (parent instanceof AST_UnaryPrefix
|
||||||
|
&& parent.operator == "delete"
|
||||||
|
&& (parent.expression instanceof AST_SymbolRef
|
||||||
|
|| parent.expression.TYPE === self.TYPE)) return self;
|
||||||
return make_node(AST_UnaryPrefix, self, {
|
return make_node(AST_UnaryPrefix, self, {
|
||||||
operator: "void",
|
operator: "void",
|
||||||
expression: make_node(AST_Number, self, {
|
expression: make_node(AST_Number, self, {
|
||||||
@@ -3629,8 +3634,16 @@ merge(Compressor.prototype, {
|
|||||||
});
|
});
|
||||||
|
|
||||||
OPT(AST_Infinity, function(self, compressor){
|
OPT(AST_Infinity, function(self, compressor){
|
||||||
var retain = compressor.option("keep_infinity") && !find_variable(compressor, "Infinity");
|
var parent = compressor.parent();
|
||||||
return retain ? self : make_node(AST_Binary, self, {
|
if (parent instanceof AST_UnaryPrefix
|
||||||
|
&& parent.operator == "delete"
|
||||||
|
&& (parent.expression instanceof AST_SymbolRef
|
||||||
|
|| parent.expression.TYPE === self.TYPE))
|
||||||
|
return self;
|
||||||
|
if (compressor.option("keep_infinity")
|
||||||
|
&& !find_variable(compressor, "Infinity"))
|
||||||
|
return self;
|
||||||
|
return make_node(AST_Binary, self, {
|
||||||
operator: "/",
|
operator: "/",
|
||||||
left: make_node(AST_Number, self, {
|
left: make_node(AST_Number, self, {
|
||||||
value: 1
|
value: 1
|
||||||
@@ -3642,7 +3655,13 @@ merge(Compressor.prototype, {
|
|||||||
});
|
});
|
||||||
|
|
||||||
OPT(AST_NaN, function(self, compressor){
|
OPT(AST_NaN, function(self, compressor){
|
||||||
return find_variable(compressor, "NaN") ? make_node(AST_Binary, self, {
|
var parent = compressor.parent();
|
||||||
|
if (parent instanceof AST_UnaryPrefix
|
||||||
|
&& parent.operator == "delete"
|
||||||
|
&& !(parent.expression instanceof AST_SymbolRef
|
||||||
|
|| parent.expression.TYPE === self.TYPE)
|
||||||
|
|| find_variable(compressor, "NaN")) {
|
||||||
|
return make_node(AST_Binary, self, {
|
||||||
operator: "/",
|
operator: "/",
|
||||||
left: make_node(AST_Number, self, {
|
left: make_node(AST_Number, self, {
|
||||||
value: 0
|
value: 0
|
||||||
@@ -3650,7 +3669,9 @@ merge(Compressor.prototype, {
|
|||||||
right: make_node(AST_Number, self, {
|
right: make_node(AST_Number, self, {
|
||||||
value: 0
|
value: 0
|
||||||
})
|
})
|
||||||
}) : self;
|
});
|
||||||
|
}
|
||||||
|
return self;
|
||||||
});
|
});
|
||||||
|
|
||||||
var ASSIGN_OPS = [ '+', '-', '/', '*', '%', '>>', '<<', '>>>', '|', '^', '&' ];
|
var ASSIGN_OPS = [ '+', '-', '/', '*', '%', '>>', '<<', '>>>', '|', '^', '&' ];
|
||||||
|
|||||||
@@ -857,3 +857,26 @@ issue_1760_2: {
|
|||||||
}
|
}
|
||||||
expect_stdout: "Infinity"
|
expect_stdout: "Infinity"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delete_expr: {
|
||||||
|
options = {
|
||||||
|
evaluate: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
console.log(delete undefined);
|
||||||
|
console.log(delete void 0);
|
||||||
|
console.log(delete Infinity);
|
||||||
|
console.log(delete (1 / 0));
|
||||||
|
console.log(delete NaN);
|
||||||
|
console.log(delete (0 / 0));
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
console.log(delete undefined);
|
||||||
|
console.log(delete void 0);
|
||||||
|
console.log(delete Infinity);
|
||||||
|
console.log(delete (1 / 0));
|
||||||
|
console.log(delete NaN);
|
||||||
|
console.log(delete (0 / 0));
|
||||||
|
}
|
||||||
|
expect_stdout: true
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user