summaryrefslogtreecommitdiff
path: root/lparser.c
diff options
context:
space:
mode:
Diffstat (limited to 'lparser.c')
-rw-r--r--lparser.c14
1 files changed, 4 insertions, 10 deletions
diff --git a/lparser.c b/lparser.c
index 562e2f96..e99bb342 100644
--- a/lparser.c
+++ b/lparser.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lparser.c,v 2.59 2008/10/28 12:55:00 roberto Exp roberto $ 2** $Id: lparser.c,v 2.60 2008/10/30 15:39:30 roberto Exp roberto $
3** Lua Parser 3** Lua Parser
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -394,7 +394,7 @@ Proto *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff, const char *name) {
394 lexstate.buff = buff; 394 lexstate.buff = buff;
395 luaX_setinput(L, &lexstate, z, tname); 395 luaX_setinput(L, &lexstate, z, tname);
396 open_func(&lexstate, &funcstate); 396 open_func(&lexstate, &funcstate);
397 funcstate.f->is_vararg = VARARG_ISVARARG; /* main func. is always vararg */ 397 funcstate.f->is_vararg = 1; /* main func. is always vararg */
398 luaX_next(&lexstate); /* read first token */ 398 luaX_next(&lexstate); /* read first token */
399 chunk(&lexstate); 399 chunk(&lexstate);
400 check(&lexstate, TK_EOS); 400 check(&lexstate, TK_EOS);
@@ -563,12 +563,7 @@ static void parlist (LexState *ls) {
563 } 563 }
564 case TK_DOTS: { /* param -> `...' */ 564 case TK_DOTS: { /* param -> `...' */
565 luaX_next(ls); 565 luaX_next(ls);
566#if defined(LUA_COMPAT_VARARG) 566 f->is_vararg = 1;
567 /* use `arg' as default name */
568 new_localvarliteral(ls, "arg", nparams++);
569 f->is_vararg = VARARG_HASARG | VARARG_NEEDSARG;
570#endif
571 f->is_vararg |= VARARG_ISVARARG;
572 break; 567 break;
573 } 568 }
574 default: luaX_syntaxerror(ls, "<name> or " LUA_QL("...") " expected"); 569 default: luaX_syntaxerror(ls, "<name> or " LUA_QL("...") " expected");
@@ -576,7 +571,7 @@ static void parlist (LexState *ls) {
576 } while (!f->is_vararg && testnext(ls, ',')); 571 } while (!f->is_vararg && testnext(ls, ','));
577 } 572 }
578 adjustlocalvars(ls, nparams); 573 adjustlocalvars(ls, nparams);
579 f->numparams = cast_byte(fs->nactvar - (f->is_vararg & VARARG_HASARG)); 574 f->numparams = cast_byte(fs->nactvar);
580 luaK_reserveregs(fs, fs->nactvar); /* reserve register for parameters */ 575 luaK_reserveregs(fs, fs->nactvar); /* reserve register for parameters */
581} 576}
582 577
@@ -761,7 +756,6 @@ static void simpleexp (LexState *ls, expdesc *v) {
761 FuncState *fs = ls->fs; 756 FuncState *fs = ls->fs;
762 check_condition(ls, fs->f->is_vararg, 757 check_condition(ls, fs->f->is_vararg,
763 "cannot use " LUA_QL("...") " outside a vararg function"); 758 "cannot use " LUA_QL("...") " outside a vararg function");
764 fs->f->is_vararg &= ~VARARG_NEEDSARG; /* don't need 'arg' */
765 init_exp(v, VVARARG, luaK_codeABC(fs, OP_VARARG, 0, 1, 0)); 759 init_exp(v, VVARARG, luaK_codeABC(fs, OP_VARARG, 0, 1, 0));
766 break; 760 break;
767 } 761 }