| 308 | |
| 309 | |
| 310 | static void pushclosure (LexState *ls, FuncState *func, expdesc *v) { |
| 311 | FuncState *fs = ls->fs; |
| 312 | Proto *f = fs->f; |
| 313 | int oldsize = f->sizep; |
| 314 | int i; |
| 315 | luaM_growvector(ls->L, f->p, fs->np, f->sizep, Proto *, |
| 316 | MAXARG_Bx, "constant table overflow"); |
| 317 | while (oldsize < f->sizep) f->p[oldsize++] = NULL; |
| 318 | f->p[fs->np++] = func->f; |
| 319 | luaC_objbarrier(ls->L, f, func->f); |
| 320 | init_exp(v, VRELOCABLE, luaK_codeABx(fs, OP_CLOSURE, 0, fs->np-1)); |
| 321 | for (i=0; i<func->f->nups; i++) { |
| 322 | OpCode o = (func->upvalues[i].k == VLOCAL) ? OP_MOVE : OP_GETUPVAL; |
| 323 | luaK_codeABC(fs, o, 0, func->upvalues[i].info, 0); |
| 324 | } |
| 325 | } |
| 326 | |
| 327 | |
| 328 | static void open_func (LexState *ls, FuncState *fs) { |
no test coverage detected