| 445 | |
| 446 | |
| 447 | static void recfield (LexState *ls, struct ConsControl *cc) { |
| 448 | /* recfield -> (NAME | `['exp1`]') = exp1 */ |
| 449 | FuncState *fs = ls->fs; |
| 450 | int reg = ls->fs->freereg; |
| 451 | expdesc key, val; |
| 452 | int rkkey; |
| 453 | if (ls->t.token == TK_NAME) { |
| 454 | luaY_checklimit(fs, cc->nh, MAX_INT, "items in a constructor"); |
| 455 | checkname(ls, &key); |
| 456 | } |
| 457 | else /* ls->t.token == '[' */ |
| 458 | yindex(ls, &key); |
| 459 | cc->nh++; |
| 460 | checknext(ls, '='); |
| 461 | rkkey = luaK_exp2RK(fs, &key); |
| 462 | expr(ls, &val); |
| 463 | luaK_codeABC(fs, OP_SETTABLE, cc->t->u.s.info, rkkey, luaK_exp2RK(fs, &val)); |
| 464 | fs->freereg = reg; /* free registers */ |
| 465 | } |
| 466 | |
| 467 | |
| 468 | static void closelistfield (FuncState *fs, struct ConsControl *cc) { |
no test coverage detected