MCPcopy Create free account
hub / github.com/SakuraEngine/SakuraEngine / adjust_assign

Function adjust_assign

xrepo/packages/l/lua/port/lua/src/lparser.c:481–500  ·  view source on GitHub ↗

** Adjust the number of results from an expression list 'e' with 'nexps' ** expressions to 'nvars' values. */

Source from the content-addressed store, hash-verified

479** expressions to 'nvars' values.
480*/
481static void adjust_assign (LexState *ls, int nvars, int nexps, expdesc *e) {
482 FuncState *fs = ls->fs;
483 int needed = nvars - nexps; /* extra values needed */
484 if (hasmultret(e->k)) { /* last expression has multiple returns? */
485 int extra = needed + 1; /* discount last expression itself */
486 if (extra < 0)
487 extra = 0;
488 luaK_setreturns(fs, e, extra); /* last exp. provides the difference */
489 }
490 else {
491 if (e->k != VVOID) /* at least one expression? */
492 luaK_exp2nextreg(fs, e); /* close last expression */
493 if (needed > 0) /* missing values? */
494 luaK_nil(fs, fs->freereg, needed); /* complete with nils */
495 }
496 if (needed > 0)
497 luaK_reserveregs(fs, needed); /* registers for extra values */
498 else /* adding 'needed' is actually a subtraction */
499 fs->freereg += needed; /* remove extra values */
500}
501
502
503#define enterlevel(ls) luaE_incCstack(ls->L)

Callers 3

restassignFunction · 0.85
forlistFunction · 0.85
localstatFunction · 0.85

Calls 4

luaK_setreturnsFunction · 0.85
luaK_exp2nextregFunction · 0.85
luaK_nilFunction · 0.85
luaK_reserveregsFunction · 0.85

Tested by

no test coverage detected