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, {
operator: "void",
expression: make_node(AST_Number, self, {
});
OPT(AST_Infinity, function(self, compressor){
- var retain = compressor.option("keep_infinity") && !find_variable(compressor, "Infinity");
- return retain ? self : 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))
+ return self;
+ if (compressor.option("keep_infinity")
+ && !find_variable(compressor, "Infinity"))
+ return self;
+ return make_node(AST_Binary, self, {
operator: "/",
left: make_node(AST_Number, self, {
value: 1
});
OPT(AST_NaN, function(self, compressor){
- return find_variable(compressor, "NaN") ? make_node(AST_Binary, self, {
- operator: "/",
- left: make_node(AST_Number, self, {
- value: 0
- }),
- right: make_node(AST_Number, self, {
- value: 0
- })
- }) : 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: "/",
+ left: make_node(AST_Number, self, {
+ value: 0
+ }),
+ right: make_node(AST_Number, self, {
+ value: 0
+ })
+ });
+ }
+ return self;
});
var ASSIGN_OPS = [ '+', '-', '/', '*', '%', '>>', '<<', '>>>', '|', '^', '&' ];
}
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
+}