]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
Add support for deferred library loads to lib_init.c.
authorMike Pall <mike>
Tue, 30 Nov 2010 20:56:03 +0000 (21:56 +0100)
committerMike Pall <mike>
Tue, 30 Nov 2010 20:56:03 +0000 (21:56 +0100)
src/lib_init.c
src/lib_package.c

index 04ca60d988ae248cfdf8d6af4b7f51177ca4cdf4..dd3a29af6dbbeb140fb885ad409a7b18c82dac99 100644 (file)
@@ -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);
 }
 
index 1757a94431fa409968b30584ed6986db5317af18..b57e51c9dbea384e7d16cdd64f49d715ecfcd76d 100644 (file)
@@ -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);