Просмотр исходного кода

'debug' library must be required before being used

Roberto Ierusalimschy 18 лет назад
Родитель
Сommit
3904a66ab0
2 измененных файлов с 33 добавлено и 2 удалено
  1. 24 1
      linit.c
  2. 9 1
      luaconf.h

+ 24 - 1
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
 }
 

+ 9 - 1
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
+