MCPcopy Create free account
hub / github.com/Snapchat/KeyDB / constructor

Function constructor

deps/lua/src/lparser.c:498–537  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

496
497
498static void constructor (LexState *ls, expdesc *t) {
499 /* constructor -> ?? */
500 FuncState *fs = ls->fs;
501 int line = ls->linenumber;
502 int pc = luaK_codeABC(fs, OP_NEWTABLE, 0, 0, 0);
503 struct ConsControl cc;
504 cc.na = cc.nh = cc.tostore = 0;
505 cc.t = t;
506 init_exp(t, VRELOCABLE, pc);
507 init_exp(&cc.v, VVOID, 0); /* no value (yet) */
508 luaK_exp2nextreg(ls->fs, t); /* fix it at stack top (for gc) */
509 checknext(ls, '{');
510 do {
511 lua_assert(cc.v.k == VVOID || cc.tostore > 0);
512 if (ls->t.token == '}') break;
513 closelistfield(fs, &cc);
514 switch(ls->t.token) {
515 case TK_NAME: { /* may be listfields or recfields */
516 luaX_lookahead(ls);
517 if (ls->lookahead.token != '=') /* expression? */
518 listfield(ls, &cc);
519 else
520 recfield(ls, &cc);
521 break;
522 }
523 case '[': { /* constructor_item -> recfield */
524 recfield(ls, &cc);
525 break;
526 }
527 default: { /* constructor_part -> listfield */
528 listfield(ls, &cc);
529 break;
530 }
531 }
532 } while (testnext(ls, ',') || testnext(ls, ';'));
533 check_match(ls, '}', '{', line);
534 lastlistfield(fs, &cc);
535 SETARG_B(fs->f->code[pc], luaO_int2fb(cc.na)); /* set initial array size */
536 SETARG_C(fs->f->code[pc], luaO_int2fb(cc.nh)); /* set initial table size */
537}
538
539/* }====================================================================== */
540

Callers 2

funcargsFunction · 0.85
simpleexpFunction · 0.85

Calls 12

luaK_codeABCFunction · 0.85
init_expFunction · 0.85
luaK_exp2nextregFunction · 0.85
checknextFunction · 0.85
closelistfieldFunction · 0.85
luaX_lookaheadFunction · 0.85
listfieldFunction · 0.85
recfieldFunction · 0.85
testnextFunction · 0.85
check_matchFunction · 0.85
lastlistfieldFunction · 0.85
luaO_int2fbFunction · 0.85

Tested by

no test coverage detected