From 94ceae0f0b8560fe26ec148cbb8d8237739efc3e Mon Sep 17 00:00:00 2001
From: Kim Alvefur <zash@zash.se>
Date: Sun, 17 Mar 2019 21:16:27 +0100
Subject: util.serialization: Allow overriding table iterator

Could be useful to eg swap it out with sorted_pairs to get a stable
serialization.

Default to next() wrapper to avoid metatable tricks from pairs().
---
 util/serialization.lua | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/util/serialization.lua b/util/serialization.lua
index c64bfec1..2ead8c12 100644
--- a/util/serialization.lua
+++ b/util/serialization.lua
@@ -33,6 +33,10 @@ local function to_hex(s)
 	return (s_gsub(s, ".", char_to_hex));
 end
 
+local function rawpairs(t)
+	return next, t, nil;
+end
+
 local function fatal_error(obj, why)
 	error("Can't serialize "..type(obj) .. (why and ": ".. why or ""));
 end
@@ -122,6 +126,7 @@ local function new(opt)
 	local freeze = opt.freeze;
 	local maxdepth = opt.maxdepth or 127;
 	local multirefs = opt.multiref;
+	local table_pairs = opt.table_iterator or rawpairs;
 
 	-- serialize one table, recursively
 	-- t - table being serialized
@@ -164,7 +169,7 @@ local function new(opt)
 		local numkey = 1;
 		local ktyp, vtyp;
 		local had_items = false;
-		for k,v in next,t do
+		for k,v in table_pairs(t) do
 			had_items = true;
 			o[l], l = itemstart, l + 1;
 			o[l], l = indent, l + 1;
-- 
cgit v1.2.3