THRIFT-4386 Add Lua 5.3/5.4 support
Clint: lua
Patch: Thomas Bruggink
This closes #3012
diff --git a/lib/lua/src/luabitwise.c b/lib/lua/src/luabitwise.c
index 2e07e17..ea9110a 100644
--- a/lib/lua/src/luabitwise.c
+++ b/lib/lua/src/luabitwise.c
@@ -27,6 +27,13 @@
return 1;
}
+static int l_unot(lua_State *L) {
+ unsigned int a = luaL_checkinteger(L, 1);
+ a = ~a;
+ lua_pushnumber(L, a);
+ return 1;
+}
+
static int l_xor(lua_State *L) {
int a = luaL_checkinteger(L, 1);
int b = luaL_checkinteger(L, 2);
@@ -35,6 +42,15 @@
return 1;
}
+static int l_uxor(lua_State *L) {
+ unsigned int a = luaL_checkinteger(L, 1);
+ unsigned int b = luaL_checkinteger(L, 2);
+ a ^= b;
+ lua_pushnumber(L, a);
+ return 1;
+}
+
+
static int l_and(lua_State *L) {
int a = luaL_checkinteger(L, 1);
int b = luaL_checkinteger(L, 2);
@@ -43,6 +59,14 @@
return 1;
}
+static int l_uand(lua_State *L) {
+ unsigned int a = luaL_checkinteger(L, 1);
+ unsigned int b = luaL_checkinteger(L, 2);
+ a &= b;
+ lua_pushnumber(L, a);
+ return 1;
+}
+
static int l_or(lua_State *L) {
int a = luaL_checkinteger(L, 1);
int b = luaL_checkinteger(L, 2);
@@ -51,6 +75,14 @@
return 1;
}
+static int l_uor(lua_State *L) {
+ unsigned int a = luaL_checkinteger(L, 1);
+ unsigned int b = luaL_checkinteger(L, 2);
+ a |= b;
+ lua_pushnumber(L, a);
+ return 1;
+}
+
static int l_shiftr(lua_State *L) {
int a = luaL_checkinteger(L, 1);
int b = luaL_checkinteger(L, 2);
@@ -59,6 +91,14 @@
return 1;
}
+static int l_ushiftr(lua_State *L) {
+ unsigned int a = luaL_checkinteger(L, 1);
+ unsigned int b = luaL_checkinteger(L, 2);
+ a = a >> b;
+ lua_pushnumber(L, a);
+ return 1;
+}
+
static int l_shiftl(lua_State *L) {
int a = luaL_checkinteger(L, 1);
int b = luaL_checkinteger(L, 2);
@@ -67,17 +107,36 @@
return 1;
}
+static int l_ushiftl(lua_State *L) {
+ unsigned int a = luaL_checkinteger(L, 1);
+ unsigned int b = luaL_checkinteger(L, 2);
+ a = a << b;
+ lua_pushnumber(L, a);
+ return 1;
+}
+
static const struct luaL_Reg funcs[] = {
{"band", l_and},
+ {"buand", l_uand},
{"bor", l_or},
+ {"buor", l_uor},
{"bxor", l_xor},
+ {"buxor", l_uxor},
{"bnot", l_not},
+ {"bunot", l_unot},
{"shiftl", l_shiftl},
+ {"ushiftl", l_ushiftl},
{"shiftr", l_shiftr},
+ {"ushiftr", l_ushiftr},
{NULL, NULL}
};
int luaopen_libluabitwise(lua_State *L) {
+#if LUA_VERSION_NUM >= 502
+ lua_newtable(L);
+ luaL_setfuncs(L, funcs, 0);
+#else
luaL_register(L, "libluabitwise", funcs);
+#endif
return 1;
}