diff options
author | Kim Alvefur <zash@zash.se> | 2018-10-27 12:43:03 +0200 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2018-10-27 12:43:03 +0200 |
commit | 193fda720d9de174a5c72d126a97dd6fa8d881fc (patch) | |
tree | b949b814294559492811672e610d7e8f75954a84 /util/serialization.lua | |
parent | a514bddb4418788111db175048628b0b91fff40c (diff) | |
download | prosody-193fda720d9de174a5c72d126a97dd6fa8d881fc.tar.gz prosody-193fda720d9de174a5c72d126a97dd6fa8d881fc.zip |
util.serialization: Add option for allowing multiple references to the same table (but not cycles)
Diffstat (limited to 'util/serialization.lua')
-rw-r--r-- | util/serialization.lua | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/util/serialization.lua b/util/serialization.lua index 998b16de..a8b64c04 100644 --- a/util/serialization.lua +++ b/util/serialization.lua @@ -120,6 +120,7 @@ local function new(opt) local hex = opt.hex; local freeze = opt.freeze; local maxdepth = opt.maxdepth or 127; + local multirefs = opt.multiref; -- serialize one table, recursively -- t - table being serialized @@ -136,7 +137,10 @@ local function new(opt) return l; end + -- Keep track of table loops + local ot = t; -- reference pre-freeze o[t] = true; + o[ot] = true; if freeze == true then -- opportunity to do pre-serialization @@ -200,6 +204,12 @@ local function new(opt) o[l], l = s_rep(indentwith, d-1), l + 1; end o[l], l = tend, l +1; + + if multirefs then + o[t] = nil; + o[ot] = nil; + end + return l; end |