util.bit53: Support for more than 2 arguments, for compat with bit32
authorMatthew Wild <mwild1@gmail.com>
Fri, 04 Mar 2022 19:37:59 +0000
changeset 12369 af02b033bd7f
parent 12368 261ce358e436
child 12370 c640717e01ca
util.bit53: Support for more than 2 arguments, for compat with bit32
util/bit53.lua
--- a/util/bit53.lua	Fri Mar 04 17:46:33 2022 +0100
+++ b/util/bit53.lua	Fri Mar 04 19:37:59 2022 +0000
@@ -1,8 +1,32 @@
 -- Only the operators needed by net.websocket.frames are provided at this point
 return {
-	band   = function (a, b) return a & b end;
-	bor    = function (a, b) return a | b end;
-	bxor   = function (a, b) return a ~ b end;
+	band   = function (a, b, ...)
+		local ret = a & b;
+		if ... then
+			for i = 1, select("#", ...) do
+				ret = ret & (select(i, ...));
+			end
+		end
+		return ret;
+	end;
+	bor    = function (a, b, ...)
+		local ret = a | b;
+		if ... then
+			for i = 1, select("#", ...) do
+				ret = ret | (select(i, ...));
+			end
+		end
+		return ret;
+	end;
+	bxor   = function (a, b, ...)
+		local ret = a ~ b;
+		if ... then
+			for i = 1, select("#", ...) do
+				ret = ret ~ (select(i, ...));
+			end
+		end
+		return ret;
+	end;
 	rshift = function (a, n) return a >> n end;
 	lshift = function (a, n) return a << n end;
 };