Software / code / prosody
Comparison
util/serialization.lua @ 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 |
| parent | 3736:73399dd525e8 |
| child | 5021:85b2689dbcfe |
comparison
equal
deleted
inserted
replaced
| 3744:ed76b64da9d1 | 3745:87f6eabd90c9 |
|---|---|
| 26 local indent = function(i) | 26 local indent = function(i) |
| 27 return string_rep("\t", i); | 27 return string_rep("\t", i); |
| 28 end | 28 end |
| 29 local function basicSerialize (o) | 29 local function basicSerialize (o) |
| 30 if type(o) == "number" or type(o) == "boolean" then | 30 if type(o) == "number" or type(o) == "boolean" then |
| 31 return tostring(o); | 31 -- no need to check for NaN, as that's not a valid table index |
| 32 if o == 1/0 then return "(1/0)"; | |
| 33 elseif o == -1/0 then return "(-1/0)"; | |
| 34 else return tostring(o); end | |
| 32 else -- assume it is a string -- FIXME make sure it's a string. throw an error otherwise. | 35 else -- assume it is a string -- FIXME make sure it's a string. throw an error otherwise. |
| 33 return (("%q"):format(tostring(o)):gsub("\\\n", "\\n")); | 36 return (("%q"):format(tostring(o)):gsub("\\\n", "\\n")); |
| 34 end | 37 end |
| 35 end | 38 end |
| 36 local function _simplesave(o, ind, t, func) | 39 local function _simplesave(o, ind, t, func) |
| 37 if type(o) == "number" then | 40 if type(o) == "number" then |
| 38 func(t, tostring(o)); | 41 if o ~= o then func(t, "(0/0)"); |
| 42 elseif o == 1/0 then func(t, "(1/0)"); | |
| 43 elseif o == -1/0 then func(t, "(-1/0)"); | |
| 44 else func(t, tostring(o)); end | |
| 39 elseif type(o) == "string" then | 45 elseif type(o) == "string" then |
| 40 func(t, (("%q"):format(o):gsub("\\\n", "\\n"))); | 46 func(t, (("%q"):format(o):gsub("\\\n", "\\n"))); |
| 41 elseif type(o) == "table" then | 47 elseif type(o) == "table" then |
| 42 if next(o) ~= nil then | 48 if next(o) ~= nil then |
| 43 func(t, "{\n"); | 49 func(t, "{\n"); |