util.serialization: Proper serialization of Infinity, -Infinity and NaN.
authorWaqas Hussain <waqas20@gmail.com>
Mon, 13 Dec 2010 15:45:08 +0000 (20:45 +0500)
committerWaqas Hussain <waqas20@gmail.com>
Mon, 13 Dec 2010 15:45:08 +0000 (20:45 +0500)
util/serialization.lua

index 474b5d655c285248330b06ae673843c3bfdc6662..e193b64f7ff70e8683ef06cfafa365cefbcd65f3 100644 (file)
@@ -28,14 +28,20 @@ local indent = function(i)
 end
 local function basicSerialize (o)
        if type(o) == "number" or type(o) == "boolean" then
-               return tostring(o);
+               -- no need to check for NaN, as that's not a valid table index
+               if o == 1/0 then return "(1/0)";
+               elseif o == -1/0 then return "(-1/0)";
+               else return tostring(o); end
        else -- assume it is a string -- FIXME make sure it's a string. throw an error otherwise.
                return (("%q"):format(tostring(o)):gsub("\\\n", "\\n"));
        end
 end
 local function _simplesave(o, ind, t, func)
        if type(o) == "number" then
-               func(t, tostring(o));
+               if o ~= o then func(t, "(0/0)");
+               elseif o == 1/0 then func(t, "(1/0)");
+               elseif o == -1/0 then func(t, "(-1/0)");
+               else func(t, tostring(o)); end
        elseif type(o) == "string" then
                func(t, (("%q"):format(o):gsub("\\\n", "\\n")));
        elseif type(o) == "table" then