Diff

util/serialization.lua @ 9485:c667887d78ad

util.serialization: Simpler metatable pre-processing It was too difficult to describe what it did.
author Kim Alvefur <zash@zash.se>
date Fri, 12 Oct 2018 00:13:24 +0200
parent 9484:1d1541630c20
child 9486:20aad0108999
line wrap: on
line diff
--- a/util/serialization.lua	Thu Oct 11 23:00:45 2018 +0200
+++ b/util/serialization.lua	Fri Oct 12 00:13:24 2018 +0200
@@ -139,25 +139,23 @@
 		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;