diff options
author | Matthew Wild <mwild1@gmail.com> | 2022-03-04 19:37:59 +0000 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2022-03-04 19:37:59 +0000 |
commit | a905ccb71a571649c7aed90bf444e1afed9a1318 (patch) | |
tree | 5ab4210548de5d58cc704209bfcd1f1f3d3758d8 | |
parent | ffb37f3ef39c41e3512b98a5cf169e40f07bd5a5 (diff) | |
download | prosody-a905ccb71a571649c7aed90bf444e1afed9a1318.tar.gz prosody-a905ccb71a571649c7aed90bf444e1afed9a1318.zip |
util.bit53: Support for more than 2 arguments, for compat with bit32
-rw-r--r-- | util/bit53.lua | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/util/bit53.lua b/util/bit53.lua index 06799a97..b5c473a3 100644 --- a/util/bit53.lua +++ b/util/bit53.lua @@ -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; }; |