added AST_NaN (output as 0/0)
authorMihai Bazon <mihai@bazon.net>
Tue, 18 Sep 2012 07:53:46 +0000 (10:53 +0300)
committerMihai Bazon <mihai@bazon.net>
Tue, 18 Sep 2012 07:53:46 +0000 (10:53 +0300)
lib/ast.js
lib/compress.js
lib/output.js

index 55e9503..39a62b1 100644 (file)
@@ -661,6 +661,11 @@ var AST_Null = DEFNODE("Null", null, {
     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(){}())
index ca7bfe5..aedd78f 100644 (file)
@@ -526,9 +526,9 @@ function Compressor(options, false_by_default) {
                     });
                     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);
@@ -1501,8 +1501,11 @@ function Compressor(options, false_by_default) {
     });
 
     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;
     });
index 9622159..ee11aeb 100644 (file)
@@ -894,6 +894,9 @@ function OutputStream(options) {
         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");
     });