Changeset

10594:13d5fb74648f

util.set: Fix equality metamethod in Lua 5.3
author Kim Alvefur <zash@zash.se>
date Wed, 15 Jan 2020 21:18:30 +0100
parents 10593:079b31c8dbf2
children 10595:17bab303daf5
files util/set.lua
diffstat 1 files changed, 6 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/util/set.lua	Wed Jan 15 21:16:08 2020 +0100
+++ b/util/set.lua	Wed Jan 15 21:18:30 2020 +0100
@@ -8,6 +8,7 @@
 
 local ipairs, pairs, setmetatable, next, tostring =
       ipairs, pairs, setmetatable, next, tostring;
+local getmetatable = getmetatable;
 local t_concat = table.concat;
 
 local _ENV = nil;
@@ -146,6 +147,11 @@
 	return new_set;
 end
 function set_mt.__eq(set1, set2)
+	if getmetatable(set1) ~= set_mt or getmetatable(set2) ~= set_mt then
+		-- Lua 5.3+ calls this if both operands are tables, even if metatables differ
+		return false;
+	end
+
 	set1, set2 = set1._items, set2._items;
 	for item in pairs(set1) do
 		if not set2[item] then