seen = seen or setmetatable({}, {__mode="k"})
for k,v in pairs(t) do
- perror(string.rep("\t", i) .. tostring(k), tostring(v))
+ perror(string.rep("\t", i) .. tostring(k) .. "\t" .. tostring(v))
if type(v) == "table" then
if not seen[v] then
seen[v] = true
assert(not seen[t], "Recursion detected.")
seen[t] = true
- local data = ""
+ local data = ""
+ local idata = ""
+ local ilen = 0
+
for k, v in pairs(t) do
- k = serialize_data(k, seen)
- v = serialize_data(v, seen)
- data = data .. ( #data > 0 and ", " or "" ) ..
- '[' .. k .. '] = ' .. v
+ if type(k) ~= "number" or k < 1 or math.floor(k) ~= k or ( k - #t ) > 3 then
+ k = serialize_data(k, seen)
+ v = serialize_data(v, seen)
+ data = data .. ( #data > 0 and ", " or "" ) ..
+ '[' .. k .. '] = ' .. v
+ elseif k > ilen then
+ ilen = k
+ end
end
- return data
+
+ for i = 1, ilen do
+ local v = serialize_data(t[i], seen)
+ idata = idata .. ( #idata > 0 and ", " or "" ) .. v
+ end
+
+ return idata .. ( #data > 0 and ", " or "" ) .. data
end
--- Recursively serialize given data to lua code, suitable for restoring