diff options
| author | Roberto I <roberto@inf.puc-rio.br> | 2025-11-28 15:12:51 -0300 |
|---|---|---|
| committer | Roberto I <roberto@inf.puc-rio.br> | 2025-11-28 15:12:51 -0300 |
| commit | a07f6a824197d7dc01c321599d3bc71936a2590e (patch) | |
| tree | a3c4c0aff91e4175c31806727190803f250bf3e6 /lparser.c | |
| parent | f33cc4ddec886ea499d7d41dd60cac5ddc5687db (diff) | |
| download | lua-a07f6a824197d7dc01c321599d3bc71936a2590e.tar.gz lua-a07f6a824197d7dc01c321599d3bc71936a2590e.tar.bz2 lua-a07f6a824197d7dc01c321599d3bc71936a2590e.zip | |
Functions with vararg tables don't need hidden args.
Vararg functions with vararg tables don't use the arguments hidden in
the stack; therfore, it doesn't need to build/keep them.
Diffstat (limited to 'lparser.c')
| -rw-r--r-- | lparser.c | 6 |
1 files changed, 3 insertions, 3 deletions
| @@ -304,7 +304,7 @@ static void check_readonly (LexState *ls, expdesc *e) { | |||
| 304 | break; | 304 | break; |
| 305 | } | 305 | } |
| 306 | case VVARGIND: { | 306 | case VVARGIND: { |
| 307 | fs->f->flag |= PF_VATAB; /* function will need a vararg table */ | 307 | needvatab(fs->f); /* function will need a vararg table */ |
| 308 | e->k = VINDEXED; | 308 | e->k = VINDEXED; |
| 309 | } /* FALLTHROUGH */ | 309 | } /* FALLTHROUGH */ |
| 310 | case VINDEXUP: case VINDEXSTR: case VINDEXED: { /* global variable */ | 310 | case VINDEXUP: case VINDEXSTR: case VINDEXED: { /* global variable */ |
| @@ -1057,7 +1057,7 @@ static void constructor (LexState *ls, expdesc *t) { | |||
| 1057 | 1057 | ||
| 1058 | 1058 | ||
| 1059 | static void setvararg (FuncState *fs) { | 1059 | static void setvararg (FuncState *fs) { |
| 1060 | fs->f->flag |= PF_ISVARARG; | 1060 | fs->f->flag |= PF_VAHID; /* by default, use hidden vararg arguments */ |
| 1061 | luaK_codeABC(fs, OP_VARARGPREP, 0, 0, 0); | 1061 | luaK_codeABC(fs, OP_VARARGPREP, 0, 0, 0); |
| 1062 | } | 1062 | } |
| 1063 | 1063 | ||
| @@ -1283,7 +1283,7 @@ static void simpleexp (LexState *ls, expdesc *v) { | |||
| 1283 | } | 1283 | } |
| 1284 | case TK_DOTS: { /* vararg */ | 1284 | case TK_DOTS: { /* vararg */ |
| 1285 | FuncState *fs = ls->fs; | 1285 | FuncState *fs = ls->fs; |
| 1286 | check_condition(ls, fs->f->flag & PF_ISVARARG, | 1286 | check_condition(ls, isvararg(fs->f), |
| 1287 | "cannot use '...' outside a vararg function"); | 1287 | "cannot use '...' outside a vararg function"); |
| 1288 | init_exp(v, VVARARG, luaK_codeABC(fs, OP_VARARG, 0, fs->f->numparams, 1)); | 1288 | init_exp(v, VVARARG, luaK_codeABC(fs, OP_VARARG, 0, fs->f->numparams, 1)); |
| 1289 | break; | 1289 | break; |
