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 | ||
