File

util/bitcompat.lua @ 10571:cfeb0077c9e9

net.server_epoll: Avoid concatenating buffer with single item Saves creating a string that'll be identical to buffer[1] anyways, as well as a C function call. Depending on Lua version and length of the string, this could be reusing an interned string, but a longer one would probably be duplicated for no reason. Having exactly one item in the buffer seems like it would be fairly common, but I have not done an extensive study. If opportunistic writes are enabled then it will be even more likely. This special case could be optimized like this in table.concat but it does not look like it is.
author Kim Alvefur <zash@zash.se>
date Sat, 28 Dec 2019 06:18:58 +0100
parent 10241:48f7cda4174d
child 12573:0f4feaf9ca64
line wrap: on
line source

-- Compatibility layer for bitwise operations

-- First try the bit32 lib
-- Lua 5.3 has it with compat enabled
-- Lua 5.2 has it by default
if _G.bit32 then
	return _G.bit32;
else
	-- Lua 5.1 may have it as a standalone module that can be installed
	local ok, bitop = pcall(require, "bit32")
	if ok then
		return bitop;
	end
end

do
	-- Lua 5.3 and 5.4 would be able to use native infix operators
	local ok, bitop = pcall(require, "util.bit53")
	if ok then
		return bitop;
	end
end

do
	-- Lastly, try the LuaJIT bitop library
	local ok, bitop = pcall(require, "bit")
	if ok then
		return bitop;
	end
end

error "No bit module found. See https://prosody.im/doc/depends#bitop";