| 472 | |
| 473 | |
| 474 | static void recfield (LexState *ls, struct ConsControl *cc) { |
| 475 | /* recfield -> (NAME | `['exp1`]') = exp1 */ |
| 476 | FuncState *fs = ls->fs; |
| 477 | int reg = ls->fs->freereg; |
| 478 | expdesc key, val; |
| 479 | int rkkey; |
| 480 | if (ls->t.token == TK_NAME) { |
| 481 | luaY_checklimit(fs, cc->nh, MAX_INT, "items in a constructor"); |
| 482 | checkname(ls, &key); |
| 483 | } |
| 484 | else /* ls->t.token == '[' */ |
| 485 | yindex(ls, &key); |
| 486 | cc->nh++; |
| 487 | checknext(ls, '='); |
| 488 | rkkey = luaK_exp2RK(fs, &key); |
| 489 | expr(ls, &val); |
| 490 | luaK_codeABC(fs, OP_SETTABLE, cc->t->u.s.info, rkkey, luaK_exp2RK(fs, &val)); |
| 491 | fs->freereg = reg; /* free registers */ |
| 492 | } |
| 493 | |
| 494 | |
| 495 | static void closelistfield (FuncState *fs, struct ConsControl *cc) { |
no test coverage detected