From e0a16c75dcd3416e1f87b79aac5af5c461e05a23 Mon Sep 17 00:00:00 2001
From: Kim Alvefur <zash@zash.se>
Date: Fri, 12 Oct 2018 00:13:24 +0200
Subject: util.serialization: Simpler metatable pre-processing

It was too difficult to describe what it did.
---
 util/serialization.lua | 26 ++++++++++++--------------
 1 file changed, 12 insertions(+), 14 deletions(-)

(limited to 'util')

diff --git a/util/serialization.lua b/util/serialization.lua
index f7f129b2..852b41da 100644
--- a/util/serialization.lua
+++ b/util/serialization.lua
@@ -139,25 +139,23 @@ local function new(opt)
 		end
 
 		o[t] = true;
-		if freeze then
+
+		if freeze == true then
 			-- opportunity to do pre-serialization
 			local mt = getmetatable(t);
-			local fr = (type(freeze) == "table" and freeze[mt]);
-			local mf = mt and mt.__freeze;
-			local tag;
-			if type(fr) == "string" then
-				tag = fr;
-				fr = mf;
-			elseif mt then
-				tag = mt.__type;
-			end
-			if type(fr) == "function" then
-				t = fr(t);
-				if type(tag) == "string" then
-					o[l], l = tag, l + 1;
+			if type(mt) == "table" then
+				local tag = mt.__name;
+				local fr = mt.__freeze;
+
+				if type(fr) == "function" then
+					t = fr(t);
+					if type(tag) == "string" then
+						o[l], l = tag, l + 1;
+					end
 				end
 			end
 		end
+
 		o[l], l = tstart, l + 1;
 		local indent = s_rep(indentwith, d);
 		local numkey = 1;
-- 
cgit v1.2.3