From 40e3e8175b1363f4ebf73aa30c030fc6fb699a25 Mon Sep 17 00:00:00 2001
From: Waqas Hussain <waqas20@gmail.com>
Date: Mon, 13 Dec 2010 20:45:08 +0500
Subject: util.serialization: Proper serialization of Infinity, -Infinity and
 NaN.

---
 util/serialization.lua | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

(limited to 'util')

diff --git a/util/serialization.lua b/util/serialization.lua
index 474b5d65..e193b64f 100644
--- a/util/serialization.lua
+++ b/util/serialization.lua
@@ -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
-- 
cgit v1.2.3