From bf2b342ac1f080d06977bdf84475dc663c9a2644 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Mon, 13 Jun 2005 11:15:54 -0300 Subject: better control for compatibility code for varargs --- lparser.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'lparser.c') diff --git a/lparser.c b/lparser.c index 9d855a5e..6b7097a6 100644 --- a/lparser.c +++ b/lparser.c @@ -1,5 +1,5 @@ /* -** $Id: lparser.c,v 2.27 2005/05/17 19:49:15 roberto Exp roberto $ +** $Id: lparser.c,v 2.28 2005/05/20 15:53:42 roberto Exp roberto $ ** Lua Parser ** See Copyright Notice in lua.h */ @@ -402,7 +402,7 @@ Proto *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff, const char *name) { lexstate.buff = buff; luaX_setinput(L, &lexstate, z, luaS_new(L, name)); open_func(&lexstate, &funcstate); - funcstate.f->is_vararg = NEWSTYLEVARARG; + funcstate.f->is_vararg = VARARG_ISVARARG; /* main func. is always vararg */ next(&lexstate); /* read first token */ chunk(&lexstate); check(&lexstate, TK_EOS); @@ -572,9 +572,12 @@ static void parlist (LexState *ls) { } case TK_DOTS: { /* param -> `...' */ next(ls); +#if defined(LUA_COMPAT_VARARG) /* use `arg' as default name */ new_localvarliteral(ls, "arg", nparams++); - f->is_vararg = 1; + f->is_vararg = VARARG_HASARG | VARARG_NEEDSARG; +#endif + f->is_vararg |= VARARG_ISVARARG; break; } default: luaX_syntaxerror(ls, " or " LUA_QL("...") " expected"); @@ -582,7 +585,7 @@ static void parlist (LexState *ls) { } while (!f->is_vararg && testnext(ls, ',')); } adjustlocalvars(ls, nparams); - f->numparams = fs->nactvar - f->is_vararg; + f->numparams = fs->nactvar - (f->is_vararg & VARARG_HASARG); luaK_reserveregs(fs, fs->nactvar); /* reserve register for parameters */ } @@ -766,7 +769,7 @@ 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 = NEWSTYLEVARARG; + fs->f->is_vararg &= ~VARARG_NEEDSARG; /* don't need 'arg' */ init_exp(v, VVARARG, luaK_codeABC(fs, OP_VARARG, 0, 1, 0)); break; } -- cgit v1.2.3-55-g6feb