lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]

I need to manipulate addresses. These addresses would be happy with specific operators, namely bitwise operators. Currently the address I manipulate are 32 bits, but I may imagine they become 64bits in future.


Previously two approaches have been taken to support bitwise operators:

-          defining a pure lua library

-          patching lua with adding bitwise operators to lua_Number


First one may not be very efficient for those needing speed and doesn’t introduce overloadable operators that may be of some use,

Second one is bound to lua_Integer which can be represented with lua_Number.  The sign issue arises then with converting the lua_Number to a lua_Integer, doing the bitwise operation and pushing back the result, when the address is > 0x8000000. This problem discouraged me from using the integer patch.


So I’ve tried another heavier approach: introducing a hex type besides numbers, which supports bitwise operators.

This type is represented by an unsigned long long (can be changed in luaconf.h).

I’ve introduced a tohex() that allows converting a “number” or a “string” to a “hex”, and tonumber accepts an hex, there is no implicit conversion.

I’ve also extended APi to support lua*_*hex function equivalent to these for number. (lua_ishex, lua_tohex, …).


It hasn’t been extensively tested, but shall be already quite reliable. It can be totally turned off in luaconf.h (just have to undefine LUA_BITWISE_OPERATORS). It also comes with not so related changes (support for int division noted \ and tolerance of != for ~= ).


Comments welcome on the interest of supporting such a new type.



Attachment: hextype.patch.gz
Description: hextype.patch.gz