From 3dbf30540892b4b9c86e0cb663069cd478a0c900 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Thu, 26 Mar 2009 09:57:01 -0300 Subject: [PATCH] no more support for old-style varargs --- ldebug.c | 8 +++----- ldo.c | 22 +--------------------- lobject.h | 8 +------- lparser.c | 14 ++++---------- luaconf.h | 9 +-------- 5 files changed, 10 insertions(+), 51 deletions(-) diff --git a/ldebug.c b/ldebug.c index 64ad70eb..8492a97b 100644 --- a/ldebug.c +++ b/ldebug.c @@ -1,5 +1,5 @@ /* -** $Id: ldebug.c,v 2.43 2009/03/04 13:32:29 roberto Exp roberto $ +** $Id: ldebug.c,v 2.44 2009/03/10 17:14:37 roberto Exp roberto $ ** Debug Interface ** See Copyright Notice in lua.h */ @@ -278,8 +278,7 @@ LUA_API int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar) { static int precheck (const Proto *pt) { check(pt->maxstacksize <= MAXSTACK); - check(pt->numparams+(pt->is_vararg & VARARG_HASARG) <= pt->maxstacksize); - check(!(pt->is_vararg & VARARG_NEEDSARG) || (pt->is_vararg & VARARG_HASARG)); + check(pt->numparams <= pt->maxstacksize); check(pt->sizeupvalues == pt->nups || pt->sizeupvalues == 0); check(pt->sizelineinfo == pt->sizecode || pt->sizelineinfo == 0); check(pt->sizecode > 0 && GET_OPCODE(pt->code[pt->sizecode-1]) == OP_RETURN); @@ -445,8 +444,7 @@ static Instruction symbexec (const Proto *pt, int lastpc, int reg) { break; } case OP_VARARG: { - check((pt->is_vararg & VARARG_ISVARARG) && - !(pt->is_vararg & VARARG_NEEDSARG)); + check(pt->is_vararg); b--; if (b == LUA_MULTRET) check(checkopenop(pt, pc)); checkreg(pt, a+b-1); diff --git a/ldo.c b/ldo.c index b89a2919..2afcd7af 100644 --- a/ldo.c +++ b/ldo.c @@ -1,5 +1,5 @@ /* -** $Id: ldo.c,v 2.55 2009/03/10 17:14:37 roberto Exp roberto $ +** $Id: ldo.c,v 2.56 2009/03/23 14:26:12 roberto Exp roberto $ ** Stack and Call structure of Lua ** See Copyright Notice in lua.h */ @@ -205,24 +205,9 @@ void luaD_callhook (lua_State *L, int event, int line) { static StkId adjust_varargs (lua_State *L, Proto *p, int actual) { int i; int nfixargs = p->numparams; - Table *htab = NULL; StkId base, fixed; for (; actual < nfixargs; ++actual) setnilvalue(L->top++); -#if defined(LUA_COMPAT_VARARG) - if (p->is_vararg & VARARG_NEEDSARG) { /* compat. with old-style vararg? */ - int nvar = actual - nfixargs; /* number of extra arguments */ - lua_assert(p->is_vararg & VARARG_HASARG); - luaC_checkGC(L); - htab = luaH_new(L); /* create `arg' table */ - sethvalue(L, L->top++, htab); - for (i=0; itop - nvar + i - 1); - /* store counter in field `n' */ - setnvalue(luaH_setstr(L, htab, luaS_newliteral(L, "n")), cast_num(nvar)); - L->top--; - } -#endif /* move fixed parameters to final position */ fixed = L->top - actual; /* first fixed argument */ base = L->top; /* final position of first argument */ @@ -230,11 +215,6 @@ static StkId adjust_varargs (lua_State *L, Proto *p, int actual) { setobjs2s(L, L->top++, fixed+i); setnilvalue(fixed+i); } - /* add `arg' parameter */ - if (htab) { - sethvalue(L, L->top++, htab); - lua_assert(iswhite(obj2gco(htab))); - } return base; } diff --git a/lobject.h b/lobject.h index 8b60155f..3172cda6 100644 --- a/lobject.h +++ b/lobject.h @@ -1,5 +1,5 @@ /* -** $Id: lobject.h,v 2.23 2008/01/30 18:05:23 roberto Exp roberto $ +** $Id: lobject.h,v 2.24 2008/08/05 19:26:23 roberto Exp roberto $ ** Type definitions for Lua objects ** See Copyright Notice in lua.h */ @@ -253,12 +253,6 @@ typedef struct Proto { } Proto; -/* masks for new-style vararg */ -#define VARARG_HASARG 1 -#define VARARG_ISVARARG 2 -#define VARARG_NEEDSARG 4 - - typedef struct LocVar { TString *varname; int startpc; /* first point where variable is active */ diff --git a/lparser.c b/lparser.c index 562e2f96..e99bb342 100644 --- a/lparser.c +++ b/lparser.c @@ -1,5 +1,5 @@ /* -** $Id: lparser.c,v 2.59 2008/10/28 12:55:00 roberto Exp roberto $ +** $Id: lparser.c,v 2.60 2008/10/30 15:39:30 roberto Exp roberto $ ** Lua Parser ** See Copyright Notice in lua.h */ @@ -394,7 +394,7 @@ Proto *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff, const char *name) { lexstate.buff = buff; luaX_setinput(L, &lexstate, z, tname); open_func(&lexstate, &funcstate); - funcstate.f->is_vararg = VARARG_ISVARARG; /* main func. is always vararg */ + funcstate.f->is_vararg = 1; /* main func. is always vararg */ luaX_next(&lexstate); /* read first token */ chunk(&lexstate); check(&lexstate, TK_EOS); @@ -563,12 +563,7 @@ static void parlist (LexState *ls) { } case TK_DOTS: { /* param -> `...' */ luaX_next(ls); -#if defined(LUA_COMPAT_VARARG) - /* use `arg' as default name */ - new_localvarliteral(ls, "arg", nparams++); - f->is_vararg = VARARG_HASARG | VARARG_NEEDSARG; -#endif - f->is_vararg |= VARARG_ISVARARG; + f->is_vararg = 1; break; } default: luaX_syntaxerror(ls, " or " LUA_QL("...") " expected"); @@ -576,7 +571,7 @@ static void parlist (LexState *ls) { } while (!f->is_vararg && testnext(ls, ',')); } adjustlocalvars(ls, nparams); - f->numparams = cast_byte(fs->nactvar - (f->is_vararg & VARARG_HASARG)); + f->numparams = cast_byte(fs->nactvar); luaK_reserveregs(fs, fs->nactvar); /* reserve register for parameters */ } @@ -761,7 +756,6 @@ static void simpleexp (LexState *ls, expdesc *v) { FuncState *fs = ls->fs; check_condition(ls, fs->f->is_vararg, "cannot use " LUA_QL("...") " outside a vararg function"); - fs->f->is_vararg &= ~VARARG_NEEDSARG; /* don't need 'arg' */ init_exp(v, VVARARG, luaK_codeABC(fs, OP_VARARG, 0, 1, 0)); break; } diff --git a/luaconf.h b/luaconf.h index 9da44ea5..a848f2e0 100644 --- a/luaconf.h +++ b/luaconf.h @@ -1,5 +1,5 @@ /* -** $Id: luaconf.h,v 1.102 2009/02/18 13:17:10 roberto Exp roberto $ +** $Id: luaconf.h,v 1.103 2009/02/20 13:50:27 roberto Exp roberto $ ** Configuration file for Lua ** See Copyright Notice in lua.h */ @@ -351,13 +351,6 @@ #define LUA_COMPAT_API -/* -@@ LUA_COMPAT_VARARG controls compatibility with old vararg feature. -** CHANGE it to undefined as soon as your programs use only '...' to -** access vararg parameters (instead of the old 'arg' table). -*/ -#define LUA_COMPAT_VARARG - /* @@ LUA_COMPAT_GFIND controls compatibility with old 'string.gfind' name. ** CHANGE it to undefined as soon as you rename 'string.gfind' to