util.serialization: Proper serialization of Infinity, -Infinity and NaN.

Mon, 13 Dec 2010 20:45:08 +0500

author
Waqas Hussain <waqas20@gmail.com>
date
Mon, 13 Dec 2010 20:45:08 +0500
changeset 3865
c6af5de97b37
parent 3864
345f1d5b7022
child 3866
0573cb708c25

util.serialization: Proper serialization of Infinity, -Infinity and NaN.

util/serialization.lua file | annotate | diff | comparison | revisions
--- 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

mercurial