aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2020-01-15 21:18:30 +0100
committerKim Alvefur <zash@zash.se>2020-01-15 21:18:30 +0100
commitf4af8004e39ff6f0066fda7dd7eb5457371e1e64 (patch)
tree5292b4c3ae6633909a5176abdd98ff70cb95b124
parent78eb3b5935a53e1a4e1217555f438674ca40e2ba (diff)
downloadprosody-f4af8004e39ff6f0066fda7dd7eb5457371e1e64.tar.gz
prosody-f4af8004e39ff6f0066fda7dd7eb5457371e1e64.zip
util.set: Fix equality metamethod in Lua 5.3
-rw-r--r--util/set.lua6
1 files changed, 6 insertions, 0 deletions
diff --git a/util/set.lua b/util/set.lua
index 02fabc6a..827a9158 100644
--- a/util/set.lua
+++ b/util/set.lua
@@ -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 @@ function set_mt.__div(set, func)
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