aboutsummaryrefslogtreecommitdiff
path: root/lparser.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2017-05-13 10:04:33 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2017-05-13 10:04:33 -0300
commit5c8770f8969a73cf4ca503f54c2217f76de62e04 (patch)
treed5dac87490011d117277d94c81f6f2fd47b1b094 /lparser.c
parent7647d5d13d016f114dac4be0b9da62d502eab400 (diff)
downloadlua-5c8770f8969a73cf4ca503f54c2217f76de62e04.tar.gz
lua-5c8770f8969a73cf4ca503f54c2217f76de62e04.tar.bz2
lua-5c8770f8969a73cf4ca503f54c2217f76de62e04.zip
back to old-style vararg system (with vararg table collecting extra
arguments)
Diffstat (limited to 'lparser.c')
-rw-r--r--lparser.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/lparser.c b/lparser.c
index af5891c2..37f84cce 100644
--- a/lparser.c
+++ b/lparser.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lparser.c,v 2.157 2017/04/28 20:57:45 roberto Exp roberto $ 2** $Id: lparser.c,v 2.158 2017/04/29 18:09:17 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*/
@@ -766,7 +766,12 @@ static void parlist (LexState *ls) {
766 } 766 }
767 case TK_DOTS: { /* param -> '...' */ 767 case TK_DOTS: { /* param -> '...' */
768 luaX_next(ls); 768 luaX_next(ls);
769 if (testnext(ls, '='))
770 new_localvar(ls, str_checkname(ls));
771 else
772 new_localvarliteral(ls, "_ARG");
769 f->is_vararg = 1; /* declared vararg */ 773 f->is_vararg = 1; /* declared vararg */
774 nparams++;
770 break; 775 break;
771 } 776 }
772 default: luaX_syntaxerror(ls, "<name> or '...' expected"); 777 default: luaX_syntaxerror(ls, "<name> or '...' expected");
@@ -1622,6 +1627,10 @@ static void mainfunc (LexState *ls, FuncState *fs) {
1622 expdesc v; 1627 expdesc v;
1623 open_func(ls, fs, &bl); 1628 open_func(ls, fs, &bl);
1624 fs->f->is_vararg = 1; /* main function is always declared vararg */ 1629 fs->f->is_vararg = 1; /* main function is always declared vararg */
1630 fs->f->numparams = 1;
1631 new_localvarliteral(ls, "_ARG");
1632 adjustlocalvars(ls, 1);
1633 luaK_reserveregs(fs, 1); /* reserve register for vararg */
1625 init_exp(&v, VLOCAL, 0); /* create and... */ 1634 init_exp(&v, VLOCAL, 0); /* create and... */
1626 newupvalue(fs, ls->envn, &v); /* ...set environment upvalue */ 1635 newupvalue(fs, ls->envn, &v); /* ...set environment upvalue */
1627 luaX_next(ls); /* read first token */ 1636 luaX_next(ls); /* read first token */