diff options
Diffstat (limited to 'lparser.c')
-rw-r--r-- | lparser.c | 14 |
1 files changed, 4 insertions, 10 deletions
@@ -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 | } |