# HG changeset patch # User Waqas Hussain # Date 1292255108 -18000 # Node ID c6af5de97b375e7e4695466a698c72c6fc74ad54 # Parent 345f1d5b7022827c7c9a30f073e88e3d9f17a629 util.serialization: Proper serialization of Infinity, -Infinity and NaN. diff -r 345f1d5b7022 -r c6af5de97b37 util/serialization.lua --- a/util/serialization.lua Mon Dec 13 19:28:57 2010 +0500 +++ b/util/serialization.lua Mon Dec 13 20:45:08 2010 +0500 @@ -28,14 +28,20 @@ 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