better control for compatibility code

This commit is contained in:
Roberto Ierusalimschy 2005-03-29 13:20:48 -03:00
parent 1c9c886974
commit e6e543a534
4 changed files with 43 additions and 10 deletions

View File

@ -1,5 +1,5 @@
/*
** $Id: lauxlib.h,v 1.73 2004/10/18 12:51:44 roberto Exp roberto $
** $Id: lauxlib.h,v 1.74 2005/01/10 17:31:50 roberto Exp roberto $
** Auxiliary functions for building Lua libraries
** See Copyright Notice in lua.h
*/
@ -15,6 +15,12 @@
#include "lua.h"
#if !LUA_COMPAT_GETN
#define luaL_getn(L,i) lua_objsize(L, i)
#define luaL_setn(L,i,j) ((void)0) /* no op! */
#endif
/* extra error code for `luaL_load' */
#define LUA_ERRFILE (LUA_ERRERR+1)

4
ldo.c
View File

@ -1,5 +1,5 @@
/*
** $Id: ldo.c,v 2.19 2005/03/18 18:55:09 roberto Exp roberto $
** $Id: ldo.c,v 2.20 2005/03/28 17:17:53 roberto Exp roberto $
** Stack and Call structure of Lua
** See Copyright Notice in lua.h
*/
@ -197,6 +197,7 @@ static StkId adjust_varargs (lua_State *L, int nfixargs, int actual,
for (; actual < nfixargs; ++actual)
setnilvalue(L->top++);
}
#if LUA_COMPAT_VARARG
if (style != NEWSTYLEVARARG) { /* compatibility with old-style vararg */
int nvar = actual - nfixargs; /* number of extra arguments */
luaC_checkGC(L);
@ -207,6 +208,7 @@ static StkId adjust_varargs (lua_State *L, int nfixargs, int actual,
setnvalue(luaH_setstr(L, htab, luaS_newliteral(L, "n")),
cast(lua_Number, nvar));
}
#endif
/* move fixed parameters to final position */
fixed = L->top - actual; /* first fixed argument */
base = L->top; /* final position of first argument */

View File

@ -1,5 +1,5 @@
/*
** $Id: loadlib.c,v 1.22 2005/03/18 16:38:43 roberto Exp roberto $
** $Id: loadlib.c,v 1.23 2005/03/29 14:30:16 roberto Exp roberto $
** Dynamic library loader for Lua
** See Copyright Notice in lua.h
**
@ -315,11 +315,13 @@ static int ll_loadlib (lua_State *L) {
static int loader_Lua (lua_State *L) {
const char *name = luaL_checkstring(L, 1);
const char *fname = luaL_gsub(L, name, ".", LUA_DIRSEP);
const char *path;
const char *path = NULL;
#if LUA_COMPAT_PATH
/* try first `LUA_PATH' for compatibility */
lua_pushstring(L, "LUA_PATH");
lua_rawget(L, LUA_GLOBALSINDEX);
path = lua_tostring(L, -1);
#endif
if (!path) {
lua_pop(L, 1);
lua_getfield(L, LUA_ENVIRONINDEX, "path");
@ -505,8 +507,10 @@ LUALIB_API int luaopen_loadlib (lua_State *L) {
lua_setfield(L, -2, "preload");
/* create `loadlib' function */
lua_pushcfunction(L, ll_loadlib);
#if LUA_COMPAT_LOADLIB
lua_pushvalue(L, -1);
lua_setfield(L, LUA_GLOBALSINDEX, "loadlib"); /* COMPATIBILITY ONLY!! */
lua_setfield(L, LUA_GLOBALSINDEX, "loadlib");
#endif
lua_setfield(L, -2, "loadlib");
lua_pushvalue(L, LUA_GLOBALSINDEX);
luaL_openlib(L, NULL, ll_funcs, 0); /* open lib into global table */

View File

@ -1,5 +1,5 @@
/*
** $Id: luaconf.h,v 1.38 2005/03/21 18:12:07 roberto Exp roberto $
** $Id: luaconf.h,v 1.39 2005/03/29 14:30:16 roberto Exp roberto $
** Configuration file for Lua
** See Copyright Notice in lua.h
*/
@ -229,11 +229,32 @@
/*
** CHANGE here (undefining both luaL_getn and luaL_setn) if you want
** exact compatibility with the behavior of setn/getn in Lua 5.0.
@@ LUA_COMPAT_GETN controls compatibility with old getn behavior.
** CHANGE it to 1 if you want exact compatibility with the behavior of
** setn/getn in Lua 5.0.
*/
#define luaL_getn(L,i) lua_objsize(L, i)
#define luaL_setn(L,i,j) ((void)0) /* no op! */
#define LUA_COMPAT_GETN 0
/*
@@ LUA_COMPAT_PATH controls compatibility about LUA_PATH.
** CHANGE it to 1 if you want `require' to look for global LUA_PATH
** before checking package.path.
*/
#define LUA_COMPAT_PATH 0
/*
@@ LUA_COMPAT_LOADLIB controls compatibility about global loadlib.
** CHANGE it to 1 if you want a global `loadlib' function (otherwise
** the function is only available as `package.loadlib').
*/
#define LUA_COMPAT_LOADLIB 1
/*
@@ LUA_COMPAT_VARARG controls compatibility with old vararg feature.
** CHANGE it to 1 if you want vararg functions that do not use `...'
** to get an `arg' table with their extra arguments.
*/
#define LUA_COMPAT_VARARG 1
/*