commit 3904a66ab0ea441504afb74160fb6ff5efd8d33b
parent ffc5f78229be51a31a8a75c09d5f8d35fb7654bb
Author: Roberto Ierusalimschy <roberto@inf.puc-rio.br>
Date: Fri, 22 Jun 2007 13:58:48 -0300
'debug' library must be required before being used
Diffstat:
2 files changed, 33 insertions(+), 2 deletions(-)
diff --git 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
@@ -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
+