Changeset

3745:87f6eabd90c9

util.serialization: Proper serialization of Infinity, -Infinity and NaN.
author Waqas Hussain <waqas20@gmail.com>
date Mon, 13 Dec 2010 20:45:08 +0500
parents 3744:ed76b64da9d1
children 3746:9719316c854e
files util/serialization.lua
diffstat 1 files changed, 8 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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