From e5df13e80e7b652492e6d2b26afca43e94262e29 Mon Sep 17 00:00:00 2001 From: Steven Barth Date: Sat, 26 Jul 2008 17:24:46 +0000 Subject: libs: Fixed serialization stuff --- libs/core/luasrc/util.lua | 33 +++++++++------------------------ 1 file changed, 9 insertions(+), 24 deletions(-) (limited to 'libs/core') diff --git a/libs/core/luasrc/util.lua b/libs/core/luasrc/util.lua index 2d821acff..48b6fa063 100644 --- a/libs/core/luasrc/util.lua +++ b/libs/core/luasrc/util.lua @@ -375,27 +375,14 @@ function clone(object, deep) return copy end --- Test whether the given table value is a numerically indexed table. -function _is_numeric_table(t) - local k = pairs(t)(t) - return ( tonumber(k) ~= nil ) -end - -- Serialize the contents of a table value. function _serialize_table(t) local data = "" - if _is_numeric_table(t) then - for i, v in ipairs(t) do - v = serialize_data(v) - data = data .. ( #data > 0 and ", " or "" ) .. v - end - else - for k, v in pairs(t) do - k = serialize_data(k) - v = serialize_data(v) - data = data .. ( #data > 0 and "; " or "" ) .. - '[' .. k .. '] = ' .. v - end + for k, v in pairs(t) do + k = serialize_data(k) + v = serialize_data(v) + data = data .. ( #data > 0 and ", " or "" ) .. + '[' .. k .. '] = ' .. v end return data end @@ -410,15 +397,13 @@ function serialize_data(val) if val == nil then return "nil" elseif type(val) == "number" then - return tostring(val) + return val elseif type(val) == "string" then - val = val:gsub("\\", "\\\\") - :gsub("\r", "\\r") - :gsub("\n", "\\n") - :gsub('"','\\"') - return '"' .. val .. '"' + return string.format("%q", val) elseif type(val) == "boolean" then return val and "true" or "false" + elseif type(val) == "function" then + return string.format("loadstring(%q)", get_bytecode(val)) elseif type(val) == "table" then return "{ " .. _serialize_table(val) .. " }" else -- cgit v1.2.3