# HG changeset patch # User Kim Alvefur # Date 1552851601 -3600 # Node ID aebfd1601ae2da5b6da21a5582253a2e634cbc23 # Parent f5623a1b33e5e7cf9d40c2b5cae9504eddec2016 util.serialization: Optimize handling of last table separator Fewer next() calls and a step towards allowing use of a different iterator. diff -r f5623a1b33e5 -r aebfd1601ae2 util/serialization.lua --- a/util/serialization.lua Mon Mar 18 09:50:23 2019 +0000 +++ b/util/serialization.lua Sun Mar 17 20:40:01 2019 +0100 @@ -163,7 +163,9 @@ local indent = s_rep(indentwith, d); local numkey = 1; local ktyp, vtyp; + local had_items = false; for k,v in next,t do + had_items = true; o[l], l = itemstart, l + 1; o[l], l = indent, l + 1; ktyp, vtyp = type(k), type(v); @@ -194,14 +196,10 @@ else o[l], l = ser(v), l + 1; end - -- last item? - if next(t, k) ~= nil then - o[l], l = itemsep, l + 1; - else - o[l], l = itemlast, l + 1; - end + o[l], l = itemsep, l + 1; end - if next(t) ~= nil then + if had_items then + o[l - 1] = itemlast; o[l], l = s_rep(indentwith, d-1), l + 1; end o[l], l = tend, l +1;