From 4ed8a1931b4bf2331d9f79bc1f08576eb800c2ee Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Tue, 30 Nov 2010 21:56:03 +0100 Subject: [PATCH] Add support for deferred library loads to lib_init.c. --- src/lib_init.c | 17 ++++++++++++++--- src/lib_package.c | 2 +- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/lib_init.c b/src/lib_init.c index 04ca60d9..dd3a29af 100644 --- a/src/lib_init.c +++ b/src/lib_init.c @@ -11,7 +11,7 @@ #include "lauxlib.h" #include "lualib.h" -static const luaL_Reg lualibs[] = { +static const luaL_Reg lj_lib_load[] = { { "", luaopen_base }, { LUA_LOADLIBNAME, luaopen_package }, { LUA_TABLIBNAME, luaopen_table }, @@ -25,13 +25,24 @@ static const luaL_Reg lualibs[] = { { NULL, NULL } }; +static const luaL_Reg lj_lib_preload[] = { + { NULL, NULL } +}; + LUALIB_API void luaL_openlibs(lua_State *L) { - const luaL_Reg *lib = lualibs; - for (; lib->func; lib++) { + const luaL_Reg *lib; + for (lib = lj_lib_load; lib->func; lib++) { lua_pushcfunction(L, lib->func); lua_pushstring(L, lib->name); lua_call(L, 1, 0); } + luaL_findtable(L, LUA_REGISTRYINDEX, "_PRELOAD", + sizeof(lj_lib_preload)/sizeof(lj_lib_preload[0])-1); + for (lib = lj_lib_preload; lib->func; lib++) { + lua_pushcfunction(L, lib->func); + lua_setfield(L, -2, lib->name); + } + lua_pop(L, 1); } diff --git a/src/lib_package.c b/src/lib_package.c index 1757a944..b57e51c9 100644 --- a/src/lib_package.c +++ b/src/lib_package.c @@ -499,7 +499,7 @@ LUALIB_API int luaopen_package(lua_State *L) lua_setfield(L, -2, "config"); luaL_findtable(L, LUA_REGISTRYINDEX, "_LOADED", 16); lua_setfield(L, -2, "loaded"); - lua_newtable(L); + luaL_findtable(L, LUA_REGISTRYINDEX, "_PRELOAD", 4); lua_setfield(L, -2, "preload"); lua_pushvalue(L, LUA_GLOBALSINDEX); luaL_register(L, NULL, package_global);