MCPcopy Create free account
hub / github.com/ObEngine/ObEngine / moveresults

Function moveresults

extlibs/lua/src/ldo.c:373–408  ·  view source on GitHub ↗

** Given 'nres' results at 'firstResult', move 'wanted' of them to 'res'. ** Handle most typical cases (zero results for commands, one result for ** expressions, multiple results for tail calls/single parameters) ** separated. */

Source from the content-addressed store, hash-verified

371** separated.
372*/
373static void moveresults (lua_State *L, StkId res, int nres, int wanted) {
374 StkId firstresult;
375 int i;
376 switch (wanted) { /* handle typical cases separately */
377 case 0: /* no values needed */
378 L->top = res;
379 return;
380 case 1: /* one value needed */
381 if (nres == 0) /* no results? */
382 setnilvalue(s2v(res)); /* adjust with nil */
383 else
384 setobjs2s(L, res, L->top - nres); /* move it to proper place */
385 L->top = res + 1;
386 return;
387 case LUA_MULTRET:
388 wanted = nres; /* we want all results */
389 break;
390 default: /* multiple results (or to-be-closed variables) */
391 if (hastocloseCfunc(wanted)) { /* to-be-closed variables? */
392 ptrdiff_t savedres = savestack(L, res);
393 luaF_close(L, res, LUA_OK); /* may change the stack */
394 res = restorestack(L, savedres);
395 wanted = codeNresults(wanted); /* correct value */
396 if (wanted == LUA_MULTRET)
397 wanted = nres;
398 }
399 break;
400 }
401 firstresult = L->top - nres; /* index of first result */
402 /* move all results to correct place */
403 for (i = 0; i < nres && i < wanted; i++)
404 setobjs2s(L, res + i, firstresult + i);
405 for (; i < wanted; i++) /* complete wanted number of results */
406 setnilvalue(s2v(res + i));
407 L->top = res + wanted; /* top points after the last result */
408}
409
410
411/*

Callers 1

luaD_poscallFunction · 0.85

Calls 1

luaF_closeFunction · 0.85

Tested by

no test coverage detected