From 3904a66ab0ea441504afb74160fb6ff5efd8d33b Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Fri, 22 Jun 2007 13:59:11 -0300 Subject: [PATCH] 'debug' library must be required before being used --- linit.c | 25 ++++++++++++++++++++++++- luaconf.h | 10 +++++++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/linit.c b/linit.c index 5f3ceda7..3b8fc1c6 100644 --- a/linit.c +++ b/linit.c @@ -1,5 +1,5 @@ /* -** $Id: linit.c,v 1.13 2005/08/26 17:36:32 roberto Exp roberto $ +** $Id: linit.c,v 1.14 2005/12/29 15:32:11 roberto Exp roberto $ ** Initialization of libraries for lua.c ** See Copyright Notice in lua.h */ @@ -14,6 +14,9 @@ #include "lauxlib.h" +/* +** these libs are preloaded in Lua and are readily available to any program +*/ static const luaL_Reg lualibs[] = { {"", luaopen_base}, {LUA_LOADLIBNAME, luaopen_package}, @@ -22,6 +25,14 @@ static const luaL_Reg lualibs[] = { {LUA_OSLIBNAME, luaopen_os}, {LUA_STRLIBNAME, luaopen_string}, {LUA_MATHLIBNAME, luaopen_math}, + {NULL, NULL} +}; + + +/* +** these libs must be required before used +*/ +static const luaL_Reg luareqlibs[] = { {LUA_DBLIBNAME, luaopen_debug}, {NULL, NULL} }; @@ -34,5 +45,17 @@ LUALIB_API void luaL_openlibs (lua_State *L) { lua_pushstring(L, lib->name); lua_call(L, 1, 0); } + lib = luareqlibs; + luaL_findtable(L, LUA_GLOBALSINDEX, "package.preload", 0); + for (; lib->func; lib++) { + lua_pushcfunction(L, lib->func); + lua_setfield(L, -2, lib->name); + } + lua_pop(L, 1); /* remove package.preload table */ +#ifdef LUA_COMPAT_DEBUGLIB + lua_getglobal(L, "require"); + lua_pushliteral(L, LUA_DBLIBNAME); + lua_call(L, 1, 0); /* call 'require"debug"' */ +#endif } diff --git a/luaconf.h b/luaconf.h index 49a0e30a..080d9161 100644 --- a/luaconf.h +++ b/luaconf.h @@ -1,5 +1,5 @@ /* -** $Id: luaconf.h,v 1.88 2007/05/03 20:49:29 roberto Exp roberto $ +** $Id: luaconf.h,v 1.89 2007/06/21 13:48:04 roberto Exp roberto $ ** Configuration file for Lua ** See Copyright Notice in lua.h */ @@ -334,6 +334,14 @@ */ #define LUA_COMPAT_GFIND +/* +@@ LUA_COMPAT_DEBUGLIB controls compatibility with preloading +@* the debug library. +** CHANGE it to undefined as soon as you add 'require"debug"' everywhere +** you need the debug library. +*/ +#define LUA_COMPAT_DEBUGLIB +