value: null
}, AST_Atom);
+var AST_NaN = DEFNODE("NaN", null, {
+ $documentation: "The impossible value",
+ value: 0/0
+}, AST_Atom);
+
var AST_Undefined = DEFNODE("Undefined", null, {
$documentation: "The `undefined` value",
value: (function(){}())
});
break;
case "number":
- ast = make_node(AST_Number, this, {
+ ast = make_node(isNaN(val) ? AST_NaN : AST_Number, this, {
value: val
- });
+ }).optimize(compressor);
break;
case "boolean":
ast = make_node(val ? AST_True : AST_False, this);
});
AST_SymbolRef.DEFMETHOD("optimize", function(compressor){
- if (this.name == "undefined" && this.undeclared()) {
+ if (this.undeclared()) switch (this.name) {
+ case "undefined":
return make_node(AST_Undefined, this).optimize(compressor);
+ case "NaN":
+ return make_node(AST_NaN, this).optimize(compressor);
}
return this;
});
output.print("void 0");
//output.print("[][0]");
});
+ DEFPRINT(AST_NaN, function(self, output){
+ output.print("0/0");
+ });
DEFPRINT(AST_This, function(self, output){
output.print("this");
});