diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2010-07-02 08:38:13 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2010-07-02 08:38:13 -0300 |
commit | 7192afafeeb1a96b3de60af90a72cd8762b09d94 (patch) | |
tree | d1e7e061822f755c33cc497d98ea451c7e7e32e8 /linit.c | |
parent | a139e2e003e0b62b7d34eeda20dd2354e74885f9 (diff) | |
download | lua-7192afafeeb1a96b3de60af90a72cd8762b09d94.tar.gz lua-7192afafeeb1a96b3de60af90a72cd8762b09d94.tar.bz2 lua-7192afafeeb1a96b3de60af90a72cd8762b09d94.zip |
new module policy: C modules do not create globals and do not register
themselves with 'require' (let 'require' do its work); new auxiliary
functions luaL_newlib/luaL_newlibtable/luaL_setfuncs/luaL_requiref.
Old luaL_register will be deprecated.
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 | ||