diff options
author | Steven Barth <cyrus@openwrt.org> | 2008-09-25 12:15:32 +0000 |
---|---|---|
committer | Steven Barth <cyrus@openwrt.org> | 2008-09-25 12:15:32 +0000 |
commit | c1ef612776742b585dce6079685b9cf4f12fef01 (patch) | |
tree | 98fcb35a7ac39998a415ea46edf9d4a3b1a47d58 /package/lua/patches/410-bitlib_25-embedded.patch | |
parent | 7300d22877be313bee64f736d0fae6d6b830caf7 (diff) | |
download | upstream-c1ef612776742b585dce6079685b9cf4f12fef01.tar.gz upstream-c1ef612776742b585dce6079685b9cf4f12fef01.tar.bz2 upstream-c1ef612776742b585dce6079685b9cf4f12fef01.zip |
Embed luaposix and bitlib into Lua core library
SVN-Revision: 12696
Diffstat (limited to 'package/lua/patches/410-bitlib_25-embedded.patch')
-rw-r--r-- | package/lua/patches/410-bitlib_25-embedded.patch | 186 |
1 files changed, 186 insertions, 0 deletions
diff --git a/package/lua/patches/410-bitlib_25-embedded.patch b/package/lua/patches/410-bitlib_25-embedded.patch new file mode 100644 index 0000000000..91de0647f5 --- /dev/null +++ b/package/lua/patches/410-bitlib_25-embedded.patch @@ -0,0 +1,186 @@ +Index: lua-5.1.4/src/Makefile +=================================================================== +--- lua-5.1.4.orig/src/Makefile 2008-09-25 13:08:31.000000000 +0200 ++++ lua-5.1.4/src/Makefile 2008-09-25 13:08:43.000000000 +0200 +@@ -29,7 +29,7 @@ + lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o \ + lundump.o lvm.o lzio.o lnum.o + LIB_O= lauxlib.o lbaselib.o ldblib.o liolib.o lmathlib.o loslib.o ltablib.o \ +- lstrlib.o loadlib.o linit.o lposix.o ++ lstrlib.o loadlib.o linit.o lposix.o lbitlib.o + + LUA_T= lua + LUA_O= lua.o +Index: lua-5.1.4/src/bit_limits.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ lua-5.1.4/src/bit_limits.h 2008-09-25 13:09:16.000000000 +0200 +@@ -0,0 +1,4 @@ ++#define BITLIB_FLOAT_BITS 53 ++#define BITLIB_FLOAT_MAX 0xfffffffffffffL ++#define BITLIB_FLOAT_MIN (-0x10000000000000L) ++#define BITLIB_FLOAT_UMAX 0x1fffffffffffffUL +Index: lua-5.1.4/src/lbitlib.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ lua-5.1.4/src/lbitlib.c 2008-09-25 13:05:15.000000000 +0200 +@@ -0,0 +1,133 @@ ++/* Bitwise operations library */ ++/* (c) Reuben Thomas 2000-2008 */ ++/* See README for license */ ++ ++#include "lua.h" ++#include "lauxlib.h" ++#include "limits.h" ++ ++#include "bit_limits.h" ++ ++ ++/* FIXME: Assume lua_Integer is int */ ++#define LUA_INTEGER_MAX INT_MAX ++#define LUA_INTEGER_MIN INT_MIN ++ ++/* FIXME: Assume uint is an unsigned lua_Integer */ ++typedef unsigned int lua_UInteger; ++#define LUA_UINTEGER_MAX UINT_MAX ++ ++ ++/* Bit type size and limits */ ++ ++#define BIT_BITS \ ++ (CHAR_BIT * sizeof(lua_Integer) > BITLIB_FLOAT_BITS ? \ ++ BITLIB_FLOAT_BITS : (CHAR_BIT * sizeof(lua_Integer))) ++ ++/* This code may give warnings if BITLIB_FLOAT_* are too big to fit in ++ long, but that doesn't matter since in that case they won't be ++ used. */ ++#define BIT_MAX \ ++ (CHAR_BIT * sizeof(lua_Integer) > BITLIB_FLOAT_BITS ? BITLIB_FLOAT_MAX : LUA_INTEGER_MAX) ++ ++#define BIT_MIN \ ++ (CHAR_BIT * sizeof(lua_Integer) > BITLIB_FLOAT_BITS ? BITLIB_FLOAT_MIN : LUA_INTEGER_MIN) ++ ++#define BIT_UMAX \ ++ (CHAR_BIT * sizeof(lua_Integer) > BITLIB_FLOAT_BITS ? BITLIB_FLOAT_UMAX : LUA_UINTEGER_MAX) ++ ++ ++/* Define TOBIT to get a bit value */ ++#ifdef BUILTIN_CAST ++#define ++#define TOBIT(L, n, res) \ ++ ((void)(res), luaL_checkinteger((L), (n))) ++#else ++#include <stdint.h> ++#include <math.h> ++ ++/* FIXME: Assume lua_Number fits in a double (use of fmod). */ ++#define TOBIT(L, n, res) \ ++ ((lua_Integer)(((res) = fmod(luaL_checknumber(L, (n)), (double)BIT_UMAX + 1.0)), \ ++ (res) > BIT_MAX ? ((res) -= (double)BIT_UMAX, (res) -= 1) : \ ++ ((res) < BIT_MIN ? ((res) += (double)BIT_UMAX, (res) += 1) : (res)))) ++#endif ++ ++ ++#define BIT_TRUNCATE(i) \ ++ ((i) & BIT_UMAX) ++ ++ ++/* Operations ++ ++ The macros MONADIC and VARIADIC only deal with bitwise operations. ++ ++ LOGICAL_SHIFT truncates its left-hand operand before shifting so ++ that any extra bits at the most-significant end are not shifted ++ into the result. ++ ++ ARITHMETIC_SHIFT does not truncate its left-hand operand, so that ++ the sign bits are not removed and right shift work properly. ++ */ ++ ++#define MONADIC(name, op) \ ++ static int bit_ ## name(lua_State *L) { \ ++ lua_Number f; \ ++ lua_pushinteger(L, BIT_TRUNCATE(op TOBIT(L, 1, f))); \ ++ return 1; \ ++ } ++ ++#define VARIADIC(name, op) \ ++ static int bit_ ## name(lua_State *L) { \ ++ lua_Number f; \ ++ int n = lua_gettop(L), i; \ ++ lua_Integer w = TOBIT(L, 1, f); \ ++ for (i = 2; i <= n; i++) \ ++ w op TOBIT(L, i, f); \ ++ lua_pushinteger(L, BIT_TRUNCATE(w)); \ ++ return 1; \ ++ } ++ ++#define LOGICAL_SHIFT(name, op) \ ++ static int bit_ ## name(lua_State *L) { \ ++ lua_Number f; \ ++ lua_pushinteger(L, BIT_TRUNCATE(BIT_TRUNCATE((lua_UInteger)TOBIT(L, 1, f)) op \ ++ (unsigned)luaL_checknumber(L, 2))); \ ++ return 1; \ ++ } ++ ++#define ARITHMETIC_SHIFT(name, op) \ ++ static int bit_ ## name(lua_State *L) { \ ++ lua_Number f; \ ++ lua_pushinteger(L, BIT_TRUNCATE((lua_Integer)TOBIT(L, 1, f) op \ ++ (unsigned)luaL_checknumber(L, 2))); \ ++ return 1; \ ++ } ++ ++MONADIC(cast, +) ++MONADIC(bnot, ~) ++VARIADIC(band, &=) ++VARIADIC(bor, |=) ++VARIADIC(bxor, ^=) ++ARITHMETIC_SHIFT(lshift, <<) ++LOGICAL_SHIFT(rshift, >>) ++ARITHMETIC_SHIFT(arshift, >>) ++ ++static const struct luaL_reg bitlib[] = { ++ {"cast", bit_cast}, ++ {"bnot", bit_bnot}, ++ {"band", bit_band}, ++ {"bor", bit_bor}, ++ {"bxor", bit_bxor}, ++ {"lshift", bit_lshift}, ++ {"rshift", bit_rshift}, ++ {"arshift", bit_arshift}, ++ {NULL, NULL} ++}; ++ ++LUALIB_API int luaopen_bit (lua_State *L) { ++ luaL_register(L, "bit", bitlib); ++ lua_pushnumber(L, BIT_BITS); ++ lua_setfield(L, -2, "bits"); ++ return 1; ++} +Index: lua-5.1.4/src/linit.c +=================================================================== +--- lua-5.1.4.orig/src/linit.c 2008-09-25 13:08:11.000000000 +0200 ++++ lua-5.1.4/src/linit.c 2008-09-25 13:08:27.000000000 +0200 +@@ -24,6 +24,7 @@ + {LUA_MATHLIBNAME, luaopen_math}, + {LUA_DBLIBNAME, luaopen_debug}, + {LUA_POSIXLIBNAME, luaopen_posix}, ++ {LUA_BITLIBNAME, luaopen_bit}, + {NULL, NULL} + }; + +Index: lua-5.1.4/src/lualib.h +=================================================================== +--- lua-5.1.4.orig/src/lualib.h 2008-09-25 13:07:29.000000000 +0200 ++++ lua-5.1.4/src/lualib.h 2008-09-25 13:08:06.000000000 +0200 +@@ -42,6 +42,9 @@ + #define LUA_POSIXLIBNAME "posix" + LUALIB_API int (luaopen_posix) (lua_State *L); + ++#define LUA_BITLIBNAME "bit" ++LUALIB_API int (luaopen_bit) (lua_State *L); ++ + + /* open all previous libraries */ + LUALIB_API void (luaL_openlibs) (lua_State *L); |