aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2010-11-30 21:56:03 +0100
committerMike Pall <mike>2010-11-30 21:56:03 +0100
commit4ed8a1931b4bf2331d9f79bc1f08576eb800c2ee (patch)
treeb1544cc97a01d50e012b96d671216709930f0a7e /src
parent443c542e26085b72bf0e6ffb5a70760f04b322c5 (diff)
downloadluajit-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.c17
-rw-r--r--src/lib_package.c2
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
14static const luaL_Reg lualibs[] = { 14static 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
28static const luaL_Reg lj_lib_preload[] = {
29 { NULL, NULL }
30};
31
28LUALIB_API void luaL_openlibs(lua_State *L) 32LUALIB_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);