diff options
| author | Mike Pall <mike> | 2010-11-30 21:56:03 +0100 |
|---|---|---|
| committer | Mike Pall <mike> | 2010-11-30 21:56:03 +0100 |
| commit | 4ed8a1931b4bf2331d9f79bc1f08576eb800c2ee (patch) | |
| tree | b1544cc97a01d50e012b96d671216709930f0a7e | |
| parent | 443c542e26085b72bf0e6ffb5a70760f04b322c5 (diff) | |
| download | luajit-4ed8a1931b4bf2331d9f79bc1f08576eb800c2ee.tar.gz luajit-4ed8a1931b4bf2331d9f79bc1f08576eb800c2ee.tar.bz2 luajit-4ed8a1931b4bf2331d9f79bc1f08576eb800c2ee.zip | |
Add support for deferred library loads to lib_init.c.
| -rw-r--r-- | src/lib_init.c | 17 | ||||
| -rw-r--r-- | 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 @@ | |||
| 11 | #include "lauxlib.h" | 11 | #include "lauxlib.h" |
| 12 | #include "lualib.h" | 12 | #include "lualib.h" |
| 13 | 13 | ||
| 14 | static const luaL_Reg lualibs[] = { | 14 | static const luaL_Reg lj_lib_load[] = { |
| 15 | { "", luaopen_base }, | 15 | { "", luaopen_base }, |
| 16 | { LUA_LOADLIBNAME, luaopen_package }, | 16 | { LUA_LOADLIBNAME, luaopen_package }, |
| 17 | { LUA_TABLIBNAME, luaopen_table }, | 17 | { LUA_TABLIBNAME, luaopen_table }, |
| @@ -25,13 +25,24 @@ static const luaL_Reg lualibs[] = { | |||
| 25 | { NULL, NULL } | 25 | { NULL, NULL } |
| 26 | }; | 26 | }; |
| 27 | 27 | ||
| 28 | static const luaL_Reg lj_lib_preload[] = { | ||
| 29 | { NULL, NULL } | ||
| 30 | }; | ||
| 31 | |||
| 28 | LUALIB_API void luaL_openlibs(lua_State *L) | 32 | LUALIB_API void luaL_openlibs(lua_State *L) |
| 29 | { | 33 | { |
| 30 | const luaL_Reg *lib = lualibs; | 34 | const luaL_Reg *lib; |
| 31 | for (; lib->func; lib++) { | 35 | for (lib = lj_lib_load; lib->func; lib++) { |
| 32 | lua_pushcfunction(L, lib->func); | 36 | lua_pushcfunction(L, lib->func); |
| 33 | lua_pushstring(L, lib->name); | 37 | lua_pushstring(L, lib->name); |
| 34 | lua_call(L, 1, 0); | 38 | lua_call(L, 1, 0); |
| 35 | } | 39 | } |
| 40 | luaL_findtable(L, LUA_REGISTRYINDEX, "_PRELOAD", | ||
| 41 | sizeof(lj_lib_preload)/sizeof(lj_lib_preload[0])-1); | ||
| 42 | for (lib = lj_lib_preload; lib->func; lib++) { | ||
| 43 | lua_pushcfunction(L, lib->func); | ||
| 44 | lua_setfield(L, -2, lib->name); | ||
| 45 | } | ||
| 46 | lua_pop(L, 1); | ||
| 36 | } | 47 | } |
| 37 | 48 | ||
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) | |||
| 499 | lua_setfield(L, -2, "config"); | 499 | lua_setfield(L, -2, "config"); |
| 500 | luaL_findtable(L, LUA_REGISTRYINDEX, "_LOADED", 16); | 500 | luaL_findtable(L, LUA_REGISTRYINDEX, "_LOADED", 16); |
| 501 | lua_setfield(L, -2, "loaded"); | 501 | lua_setfield(L, -2, "loaded"); |
| 502 | lua_newtable(L); | 502 | luaL_findtable(L, LUA_REGISTRYINDEX, "_PRELOAD", 4); |
| 503 | lua_setfield(L, -2, "preload"); | 503 | lua_setfield(L, -2, "preload"); |
| 504 | lua_pushvalue(L, LUA_GLOBALSINDEX); | 504 | lua_pushvalue(L, LUA_GLOBALSINDEX); |
| 505 | luaL_register(L, NULL, package_global); | 505 | luaL_register(L, NULL, package_global); |
