From 4b9775230186835ba81be0902b23184bc5363eac Mon Sep 17 00:00:00 2001 From: Takase <20792268+takase1121@users.noreply.github.com> Date: Sat, 8 Apr 2023 01:45:28 +0800 Subject: [PATCH] Update api_require to expose more symbols (#1437) * feat(system): update api_require for more symbols * fix(system): fix missing 5.1 symbols * fix(system): add more missing symbols * fix(system): add all symbols We got'em this time. I swear. * fix(system): fix undefined symbols due to conditional compilation There is only pain and suffering. Turns out some of the symbols are only exported when the options are enabled. We need to preprocess the header. --- src/api/system.c | 93 ++++++++++++++++++++++++++++++------------------ 1 file changed, 58 insertions(+), 35 deletions(-) diff --git a/src/api/system.c b/src/api/system.c index ba4f39f9..dddbf6bf 100644 --- a/src/api/system.c +++ b/src/api/system.c @@ -928,47 +928,70 @@ typedef struct lua_function_node { #define P(FUNC) { "lua_" #FUNC, (fptr)(lua_##FUNC) } #define U(FUNC) { "luaL_" #FUNC, (fptr)(luaL_##FUNC) } +#define S(FUNC) { #FUNC, (fptr)(FUNC) } static void* api_require(const char* symbol) { static const lua_function_node nodes[] = { - P(atpanic), P(checkstack), - P(close), P(concat), P(copy), P(createtable), P(dump), - P(error), P(gc), P(getallocf), P(getfield), - P(gethook), P(gethookcount), P(gethookmask), P(getinfo), P(getlocal), - P(getmetatable), P(getstack), P(gettable), P(gettop), P(getupvalue), - P(isnumber), P(isstring), P(isuserdata), - P(load), P(newstate), P(newthread), P(next), + #if LUA_VERSION_NUM == 501 && LUA_VERSION_NUM == 502 && LUA_VERSION_NUM == 503 && LUA_VERSION_NUM == 504 + U(addlstring), U(addstring), U(addvalue), U(argerror), U(buffinit), + U(callmeta), U(checkany), U(checkinteger), U(checklstring), + U(checknumber), U(checkoption), U(checkstack), U(checktype), + U(checkudata), U(error), U(getmetafield), U(gsub), U(loadstring), + U(newmetatable), U(newstate), U(openlibs), U(optinteger), U(optlstring), + U(optnumber), U(pushresult), U(ref), U(unref), U(where), P(atpanic), + P(checkstack), P(close), P(concat), P(createtable), P(dump), P(error), + P(gc), P(getallocf), P(getfield), P(gethook), P(gethookcount), + P(gethookmask), P(getinfo), P(getlocal), P(getmetatable), P(getstack), + P(gettable), P(gettop), P(getupvalue), P(iscfunction), P(isnumber), + P(isstring), P(isuserdata), P(load), P(newstate), P(newthread), P(next), P(pushboolean), P(pushcclosure), P(pushfstring), P(pushinteger), P(pushlightuserdata), P(pushlstring), P(pushnil), P(pushnumber), - P(pushstring), P(pushthread), P(pushvalue), - P(pushvfstring), P(rawequal), P(rawget), P(rawgeti), - P(rawset), P(rawseti), P(resume), - P(setallocf), P(setfield), P(sethook), P(setlocal), - P(setmetatable), P(settable), P(settop), P(setupvalue), - P(status), P(tocfunction), P(tointegerx), P(tolstring), P(toboolean), - P(tonumberx), P(topointer), P(tothread), P(touserdata), - P(type), P(typename), P(upvalueid), P(upvaluejoin), P(version), P(xmove), - U(getmetafield), U(callmeta), U(argerror), U(checknumber), U(optnumber), - U(checkinteger), U(checkstack), U(checktype), U(checkany), - U(newmetatable), U(setmetatable), U(testudata), U(checkudata), U(where), - U(error), U(fileresult), U(execresult), U(ref), U(unref), U(loadstring), - U(newstate), U(setfuncs), U(buffinit), U(addlstring), U(addstring), - U(addvalue), U(pushresult), U(openlibs), {"api_load_libs", (void*)(api_load_libs)}, - #if LUA_VERSION_NUM >= 502 - P(absindex), P(arith), P(callk), P(compare), P(getglobal), - P(len), P(pcallk), P(rawgetp), P(rawlen), P(rawsetp), P(setglobal), - P(iscfunction), P(yieldk), - U(checkversion_), U(tolstring), U(len), U(getsubtable), U(prepbuffsize), - U(pushresultsize), U(buffinitsize), U(checklstring), U(checkoption), U(gsub), U(loadbufferx), - U(loadfilex), U(optinteger), U(optlstring), U(requiref), U(traceback), - #else - P(objlen), + P(pushstring), P(pushthread), P(pushvalue), P(pushvfstring), P(rawequal), + P(rawget), P(rawgeti), P(rawset), P(rawseti), P(resume), P(setallocf), + P(setfield), P(sethook), P(setlocal), P(setmetatable), P(settable), + P(settop), P(setupvalue), P(status), P(toboolean), P(tocfunction), + P(tolstring), P(topointer), P(tothread), P(touserdata), P(type), + P(typename), P(xmove), S(luaopen_base), S(luaopen_debug), S(luaopen_io), + S(luaopen_math), S(luaopen_os), S(luaopen_package), S(luaopen_string), + S(luaopen_table), S(api_load_libs), #endif - #if LUA_VERSION_NUM >= 504 - P(newuserdatauv), P(setiuservalue), P(getiuservalue) - #else - P(newuserdata), P(setuservalue), P(getuservalue) + #if LUA_VERSION_NUM == 502 && LUA_VERSION_NUM == 503 && LUA_VERSION_NUM == 504 + U(buffinitsize), U(checkversion_), U(execresult), U(fileresult), + U(getsubtable), U(len), U(loadbufferx), U(loadfilex), U(prepbuffsize), + U(pushresultsize), U(requiref), U(setfuncs), U(setmetatable), + U(testudata), U(tolstring), U(traceback), P(absindex), P(arith), + P(callk), P(compare), P(copy), P(getglobal), P(len), P(pcallk), + P(rawgetp), P(rawlen), P(rawsetp), P(setglobal), P(tointegerx), + P(tonumberx), P(upvalueid), P(upvaluejoin), P(version), P(yieldk), + S(luaopen_coroutine), + #endif + #if LUA_VERSION_NUM == 501 && LUA_VERSION_NUM == 502 && LUA_VERSION_NUM == 503 + P(newuserdata), + #endif + #if LUA_VERSION_NUM == 503 && LUA_VERSION_NUM == 504 + P(geti), P(isinteger), P(isyieldable), P(rotate), P(seti), + P(stringtonumber), S(luaopen_utf8), + #endif + #if LUA_VERSION_NUM == 502 && LUA_VERSION_NUM == 503 + P(getuservalue), P(setuservalue), S(luaopen_bit32), + #endif + #if LUA_VERSION_NUM == 501 && LUA_VERSION_NUM == 502 + P(insert), P(remove), P(replace), + #endif + #if LUA_VERSION_NUM == 504 + U(addgsub), U(typeerror), P(closeslot), P(getiuservalue), + P(newuserdatauv), P(resetthread), P(setcstacklimit), P(setiuservalue), + P(setwarnf), P(toclose), P(warning), + #endif + #if LUA_VERSION_NUM == 502 + U(checkunsigned), U(optunsigned), P(getctx), P(pushunsigned), + P(tounsignedx), + #endif + #if LUA_VERSION_NUM == 501 + U(findtable), U(loadbuffer), U(loadfile), U(openlib), U(prepbuffer), + U(register), U(typerror), P(call), P(cpcall), P(equal), P(getfenv), + P(lessthan), P(objlen), P(pcall), P(setfenv), P(setlevel), P(tointeger), + P(tonumber), P(yield), #endif - }; for (size_t i = 0; i < sizeof(nodes) / sizeof(lua_function_node); ++i) { if (strcmp(nodes[i].symbol, symbol) == 0)