diff options
Diffstat (limited to 'linit.c')
-rw-r--r-- | linit.c | 21 |
1 files changed, 8 insertions, 13 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: linit.c,v 1.26 2010/06/10 21:29:47 roberto Exp roberto $ | 2 | ** $Id: linit.c,v 1.27 2010/06/30 17:40:27 roberto Exp roberto $ |
3 | ** Initialization of libraries for lua.c and other clients | 3 | ** Initialization of libraries for lua.c and other clients |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -36,6 +36,9 @@ static const luaL_Reg loadedlibs[] = { | |||
36 | {LUA_STRLIBNAME, luaopen_string}, | 36 | {LUA_STRLIBNAME, luaopen_string}, |
37 | {LUA_BITLIBNAME, luaopen_bit}, | 37 | {LUA_BITLIBNAME, luaopen_bit}, |
38 | {LUA_MATHLIBNAME, luaopen_math}, | 38 | {LUA_MATHLIBNAME, luaopen_math}, |
39 | #if defined(LUA_COMPAT_DEBUGLIB) | ||
40 | {LUA_DBLIBNAME, luaopen_debug}, | ||
41 | #endif | ||
39 | {NULL, NULL} | 42 | {NULL, NULL} |
40 | }; | 43 | }; |
41 | 44 | ||
@@ -51,25 +54,17 @@ static const luaL_Reg preloadedlibs[] = { | |||
51 | 54 | ||
52 | LUALIB_API void luaL_openlibs (lua_State *L) { | 55 | LUALIB_API void luaL_openlibs (lua_State *L) { |
53 | const luaL_Reg *lib; | 56 | const luaL_Reg *lib; |
54 | /* call open functions from 'loadedlibs' */ | 57 | /* call open functions from 'loadedlibs' and set results to global table */ |
55 | for (lib = loadedlibs; lib->func; lib++) { | 58 | for (lib = loadedlibs; lib->func; lib++) { |
56 | lua_pushcfunction(L, lib->func); | 59 | luaL_requiref(L, lib->name, lib->func, 1); |
57 | lua_pushstring(L, lib->name); | 60 | lua_pop(L, 1); /* remove lib */ |
58 | lua_call(L, 1, 0); | ||
59 | } | 61 | } |
60 | /* add open functions from 'preloadedlibs' into 'package.preload' table */ | 62 | /* add open functions from 'preloadedlibs' into 'package.preload' table */ |
61 | lua_pushglobaltable(L); | ||
62 | luaL_findtable(L, LUA_REGISTRYINDEX, "_PRELOAD"); | 63 | luaL_findtable(L, LUA_REGISTRYINDEX, "_PRELOAD"); |
63 | for (lib = preloadedlibs; lib->func; lib++) { | 64 | for (lib = preloadedlibs; lib->func; lib++) { |
64 | lua_pushcfunction(L, lib->func); | 65 | lua_pushcfunction(L, lib->func); |
65 | lua_setfield(L, -2, lib->name); | 66 | lua_setfield(L, -2, lib->name); |
66 | } | 67 | } |
67 | lua_pop(L, 1); /* remove package.preload table */ | 68 | lua_pop(L, 1); /* remove _PRELOAD table */ |
68 | #if defined(LUA_COMPAT_DEBUGLIB) | ||
69 | lua_getglobal(L, "require"); | ||
70 | lua_pushliteral(L, LUA_DBLIBNAME); | ||
71 | lua_call(L, 1, 0); /* call 'require"debug"' */ | ||
72 | lua_pop(L, 1); /* remove global table */ | ||
73 | #endif | ||
74 | } | 69 | } |
75 | 70 | ||