Fix serialization of floating point numbers

This commit is contained in:
ShadowNinja 2015-02-21 13:16:18 -05:00
parent 47d9b4d9aa
commit cd4324e5a8

@ -115,11 +115,20 @@ function core.serialize(x)
function dump_val(x) function dump_val(x)
local tp = type(x) local tp = type(x)
if x == nil then return "nil" if x == nil then return "nil"
elseif tp == "number" then return string.format("%d", x)
elseif tp == "string" then return string.format("%q", x) elseif tp == "string" then return string.format("%q", x)
elseif tp == "boolean" then return x and "true" or "false" elseif tp == "boolean" then return x and "true" or "false"
elseif tp == "function" then elseif tp == "function" then
return string.format("loadstring(%q)", string.dump(x)) return string.format("loadstring(%q)", string.dump(x))
elseif tp == "number" then
-- Serialize integers with string.format to prevent
-- scientific notation, which doesn't preserve
-- precision and breaks things like node position
-- hashes. Serialize floats normally.
if math.floor(x) == x then
return string.format("%d", x)
else
return tostring(x)
end
elseif tp == "table" then elseif tp == "table" then
local vals = {} local vals = {}
local idx_dumped = {} local idx_dumped = {}