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 /src | |
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.
Diffstat (limited to 'src')
-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); |