| 757 | |
| 758 | |
| 759 | static void parlist (LexState *ls) { |
| 760 | /* parlist -> [ param { `,' param } ] */ |
| 761 | FuncState *fs = ls->fs; |
| 762 | Proto *f = fs->f; |
| 763 | int nparams = 0; |
| 764 | f->is_vararg = 0; |
| 765 | if (ls->t.token != ')') { /* is `parlist' not empty? */ |
| 766 | do { |
| 767 | switch (ls->t.token) { |
| 768 | case TK_NAME: { /* param -> NAME */ |
| 769 | new_localvar(ls, str_checkname(ls)); |
| 770 | nparams++; |
| 771 | break; |
| 772 | } |
| 773 | case TK_DOTS: { /* param -> `...' */ |
| 774 | luaX_next(ls); |
| 775 | f->is_vararg = 1; |
| 776 | break; |
| 777 | } |
| 778 | default: luaX_syntaxerror(ls, "<name> or " LUA_QL("...") " expected"); |
| 779 | } |
| 780 | } while (!f->is_vararg && testnext(ls, ',')); |
| 781 | } |
| 782 | adjustlocalvars(ls, nparams); |
| 783 | f->numparams = cast_byte(fs->nactvar); |
| 784 | luaK_reserveregs(fs, fs->nactvar); /* reserve register for parameters */ |
| 785 | } |
| 786 | |
| 787 | |
| 788 | static void body (LexState *ls, expdesc *e, int ismethod, int line) { |
no test coverage detected