Lines Matching refs:fs
32 #define getlocvar(fs, i) ((fs)->f->locvars[(fs)->actvar[i]]) argument
34 #define luaY_checklimit(fs,v,l,m) if ((v)>(l)) errorlimit(fs,l,m) argument
71 static void errorlimit (FuncState *fs, int limit, const char *what) { in errorlimit() argument
72 const char *msg = (fs->f->linedefined == 0) ? in errorlimit()
73 luaO_pushfstring(fs->L, "main function has more than %d %s", limit, what) : in errorlimit()
74 luaO_pushfstring(fs->L, "function at line %d has more than %d %s", in errorlimit()
75 fs->f->linedefined, limit, what); in errorlimit()
76 luaX_lexerror(fs->ls, msg, 0); in errorlimit()
134 init_exp(e, VK, luaK_stringK(ls->fs, s)); in codestring()
144 FuncState *fs = ls->fs; in registerlocalvar() local
145 Proto *f = fs->f; in registerlocalvar()
147 luaM_growvector(ls->L, f->locvars, fs->nlocvars, f->sizelocvars, in registerlocalvar()
150 f->locvars[fs->nlocvars].varname = varname; in registerlocalvar()
152 return fs->nlocvars++; in registerlocalvar()
161 FuncState *fs = ls->fs; in new_localvar() local
162 luaY_checklimit(fs, fs->nactvar+n+1, LUAI_MAXVARS, "local variables"); in new_localvar()
163 fs->actvar[fs->nactvar+n] = cast(unsigned short, registerlocalvar(ls, name)); in new_localvar()
168 FuncState *fs = ls->fs; in adjustlocalvars() local
169 fs->nactvar = cast_byte(fs->nactvar + nvars); in adjustlocalvars()
171 getlocvar(fs, fs->nactvar - nvars).startpc = fs->pc; in adjustlocalvars()
177 FuncState *fs = ls->fs; in removevars() local
178 while (fs->nactvar > tolevel) in removevars()
179 getlocvar(fs, --fs->nactvar).endpc = fs->pc; in removevars()
183 static int indexupvalue (FuncState *fs, TString *name, expdesc *v) { in indexupvalue() argument
185 Proto *f = fs->f; in indexupvalue()
188 if (fs->upvalues[i].k == v->k && fs->upvalues[i].info == v->u.s.info) { in indexupvalue()
194 luaY_checklimit(fs, f->nups + 1, LUAI_MAXUPVALUES, "upvalues"); in indexupvalue()
195 luaM_growvector(fs->L, f->upvalues, f->nups, f->sizeupvalues, in indexupvalue()
199 luaC_objbarrier(fs->L, f, name); in indexupvalue()
201 fs->upvalues[f->nups].k = cast_byte(v->k); in indexupvalue()
202 fs->upvalues[f->nups].info = cast_byte(v->u.s.info); in indexupvalue()
207 static int searchvar (FuncState *fs, TString *n) { in searchvar() argument
209 for (i=fs->nactvar-1; i >= 0; i--) { in searchvar()
210 if (n == getlocvar(fs, i).varname) in searchvar()
217 static void markupval (FuncState *fs, int level) { in markupval() argument
218 BlockCnt *bl = fs->bl; in markupval()
224 static int singlevaraux (FuncState *fs, TString *n, expdesc *var, int base) { in singlevaraux() argument
225 if (fs == NULL) { /* no more levels? */ in singlevaraux()
230 int v = searchvar(fs, n); /* look up at current level */ in singlevaraux()
234 markupval(fs, v); /* local will be used as an upval */ in singlevaraux()
238 if (singlevaraux(fs->prev, n, var, 0) == VGLOBAL) in singlevaraux()
240 var->u.s.info = indexupvalue(fs, n, var); /* else was LOCAL or UPVAL */ in singlevaraux()
250 FuncState *fs = ls->fs; in singlevar() local
251 if (singlevaraux(fs, varname, var, 1) == VGLOBAL) in singlevar()
252 var->u.s.info = luaK_stringK(fs, varname); /* info points to global name */ in singlevar()
257 FuncState *fs = ls->fs; in adjust_assign() local
262 luaK_setreturns(fs, e, extra); /* last exp. provides the difference */ in adjust_assign()
263 if (extra > 1) luaK_reserveregs(fs, extra-1); in adjust_assign()
266 if (e->k != VVOID) luaK_exp2nextreg(fs, e); /* close last expression */ in adjust_assign()
268 int reg = fs->freereg; in adjust_assign()
269 luaK_reserveregs(fs, extra); in adjust_assign()
270 luaK_nil(fs, reg, extra); in adjust_assign()
285 static void enterblock (FuncState *fs, BlockCnt *bl, lu_byte isbreakable) { in enterblock() argument
288 bl->nactvar = fs->nactvar; in enterblock()
290 bl->previous = fs->bl; in enterblock()
291 fs->bl = bl; in enterblock()
292 lua_assert(fs->freereg == fs->nactvar); in enterblock()
296 static void leaveblock (FuncState *fs) { in leaveblock() argument
297 BlockCnt *bl = fs->bl; in leaveblock()
298 fs->bl = bl->previous; in leaveblock()
299 removevars(fs->ls, bl->nactvar); in leaveblock()
301 luaK_codeABC(fs, OP_CLOSE, bl->nactvar, 0, 0); in leaveblock()
304 lua_assert(bl->nactvar == fs->nactvar); in leaveblock()
305 fs->freereg = fs->nactvar; /* free registers */ in leaveblock()
306 luaK_patchtohere(fs, bl->breaklist); in leaveblock()
311 FuncState *fs = ls->fs; in pushclosure() local
312 Proto *f = fs->f; in pushclosure()
315 luaM_growvector(ls->L, f->p, fs->np, f->sizep, Proto *, in pushclosure()
318 f->p[fs->np++] = func->f; in pushclosure()
320 init_exp(v, VRELOCABLE, luaK_codeABx(fs, OP_CLOSURE, 0, fs->np-1)); in pushclosure()
323 luaK_codeABC(fs, o, 0, func->upvalues[i].info, 0); in pushclosure()
328 static void open_func (LexState *ls, FuncState *fs) { in open_func() argument
331 fs->f = f; in open_func()
332 fs->prev = ls->fs; /* linked list of funcstates */ in open_func()
333 fs->ls = ls; in open_func()
334 fs->L = L; in open_func()
335 ls->fs = fs; in open_func()
336 fs->pc = 0; in open_func()
337 fs->lasttarget = -1; in open_func()
338 fs->jpc = NO_JUMP; in open_func()
339 fs->freereg = 0; in open_func()
340 fs->nk = 0; in open_func()
341 fs->np = 0; in open_func()
342 fs->nlocvars = 0; in open_func()
343 fs->nactvar = 0; in open_func()
344 fs->bl = NULL; in open_func()
347 fs->h = luaH_new(L, 0, 0); in open_func()
349 sethvalue2s(L, L->top, fs->h); in open_func()
358 FuncState *fs = ls->fs; in close_func() local
359 Proto *f = fs->f; in close_func()
361 luaK_ret(fs, 0, 0); /* final return */ in close_func()
362 luaM_reallocvector(L, f->code, f->sizecode, fs->pc, Instruction); in close_func()
363 f->sizecode = fs->pc; in close_func()
364 luaM_reallocvector(L, f->lineinfo, f->sizelineinfo, fs->pc, int); in close_func()
365 f->sizelineinfo = fs->pc; in close_func()
366 luaM_reallocvector(L, f->k, f->sizek, fs->nk, TValue); in close_func()
367 f->sizek = fs->nk; in close_func()
368 luaM_reallocvector(L, f->p, f->sizep, fs->np, Proto *); in close_func()
369 f->sizep = fs->np; in close_func()
370 luaM_reallocvector(L, f->locvars, f->sizelocvars, fs->nlocvars, LocVar); in close_func()
371 f->sizelocvars = fs->nlocvars; in close_func()
375 lua_assert(fs->bl == NULL); in close_func()
376 ls->fs = fs->prev; in close_func()
378 if (fs) anchor_token(ls); in close_func()
396 lua_assert(lexstate.fs == NULL); in luaY_parser()
409 FuncState *fs = ls->fs; in field() local
411 luaK_exp2anyreg(fs, v); in field()
414 luaK_indexed(fs, v, &key); in field()
422 luaK_exp2val(ls->fs, v); in yindex()
445 FuncState *fs = ls->fs; in recfield() local
446 int reg = ls->fs->freereg; in recfield()
450 luaY_checklimit(fs, cc->nh, MAX_INT, "items in a constructor"); in recfield()
457 rkkey = luaK_exp2RK(fs, &key); in recfield()
459 luaK_codeABC(fs, OP_SETTABLE, cc->t->u.s.info, rkkey, luaK_exp2RK(fs, &val)); in recfield()
460 fs->freereg = reg; /* free registers */ in recfield()
464 static void closelistfield (FuncState *fs, struct ConsControl *cc) { in closelistfield() argument
466 luaK_exp2nextreg(fs, &cc->v); in closelistfield()
469 luaK_setlist(fs, cc->t->u.s.info, cc->na, cc->tostore); /* flush */ in closelistfield()
475 static void lastlistfield (FuncState *fs, struct ConsControl *cc) { in lastlistfield() argument
478 luaK_setmultret(fs, &cc->v); in lastlistfield()
479 luaK_setlist(fs, cc->t->u.s.info, cc->na, LUA_MULTRET); in lastlistfield()
484 luaK_exp2nextreg(fs, &cc->v); in lastlistfield()
485 luaK_setlist(fs, cc->t->u.s.info, cc->na, cc->tostore); in lastlistfield()
492 luaY_checklimit(ls->fs, cc->na, MAX_INT, "items in a constructor"); in listfield()
500 FuncState *fs = ls->fs; in constructor() local
502 int pc = luaK_codeABC(fs, OP_NEWTABLE, 0, 0, 0); in constructor()
508 luaK_exp2nextreg(ls->fs, t); /* fix it at stack top (for gc) */ in constructor()
513 closelistfield(fs, &cc); in constructor()
534 lastlistfield(fs, &cc); in constructor()
535 SETARG_B(fs->f->code[pc], luaO_int2fb(cc.na)); /* set initial array size */ in constructor()
536 SETARG_C(fs->f->code[pc], luaO_int2fb(cc.nh)); /* set initial table size */ in constructor()
545 FuncState *fs = ls->fs; in parlist() local
546 Proto *f = fs->f; in parlist()
571 f->numparams = cast_byte(fs->nactvar - (f->is_vararg & VARARG_HASARG)); in parlist()
572 luaK_reserveregs(fs, fs->nactvar); /* reserve register for parameters */ in parlist()
601 luaK_exp2nextreg(ls->fs, v); in explist1()
610 FuncState *fs = ls->fs; in funcargs() local
623 luaK_setmultret(fs, &args); in funcargs()
648 luaK_exp2nextreg(fs, &args); /* close last argument */ in funcargs()
649 nparams = fs->freereg - (base+1); in funcargs()
651 init_exp(f, VCALL, luaK_codeABC(fs, OP_CALL, base, nparams+1, 2)); in funcargs()
652 luaK_fixline(fs, line); in funcargs()
653 fs->freereg = base+1; /* call remove function and arguments and leaves in funcargs()
675 luaK_dischargevars(ls->fs, v); in prefixexp()
693 FuncState *fs = ls->fs; in primaryexp() local
703 luaK_exp2anyreg(fs, v); in primaryexp()
705 luaK_indexed(fs, v, &key); in primaryexp()
712 luaK_self(fs, v, &key); in primaryexp()
717 luaK_exp2nextreg(fs, v); in primaryexp()
753 FuncState *fs = ls->fs; in simpleexp() local
754 check_condition(ls, fs->f->is_vararg, in simpleexp()
756 fs->f->is_vararg &= ~VARARG_NEEDSARG; /* don't need 'arg' */ in simpleexp()
757 init_exp(v, VVARARG, luaK_codeABC(fs, OP_VARARG, 0, 1, 0)); in simpleexp()
836 luaK_prefix(ls->fs, uop, v); in subexpr()
845 luaK_infix(ls->fs, op, v); in subexpr()
848 luaK_posfix(ls->fs, op, v, &v2); in subexpr()
883 FuncState *fs = ls->fs; in block() local
885 enterblock(fs, &bl, 0); in block()
888 leaveblock(fs); in block()
909 FuncState *fs = ls->fs; in check_conflict() local
910 int extra = fs->freereg; /* eventual position to save local variable */ in check_conflict()
925 luaK_codeABC(fs, OP_MOVE, fs->freereg, v->u.s.info, 0); /* make copy */ in check_conflict()
926 luaK_reserveregs(fs, 1); in check_conflict()
941 luaY_checklimit(ls->fs, nvars, LUAI_MAXCCALLS - ls->L->nCcalls, in assignment()
952 ls->fs->freereg -= nexps - nvars; /* remove extra values */ in assignment()
955 luaK_setoneret(ls->fs, &e); /* close last expression */ in assignment()
956 luaK_storevar(ls->fs, &lh->v, &e); in assignment()
960 init_exp(&e, VNONRELOC, ls->fs->freereg-1); /* default assignment */ in assignment()
961 luaK_storevar(ls->fs, &lh->v, &e); in assignment()
970 luaK_goiftrue(ls->fs, &v); in cond()
976 FuncState *fs = ls->fs; in breakstat() local
977 BlockCnt *bl = fs->bl; in breakstat()
986 luaK_codeABC(fs, OP_CLOSE, bl->nactvar, 0, 0); in breakstat()
987 luaK_concat(fs, &bl->breaklist, luaK_jump(fs)); in breakstat()
993 FuncState *fs = ls->fs; in whilestat() local
998 whileinit = luaK_getlabel(fs); in whilestat()
1000 enterblock(fs, &bl, 1); in whilestat()
1003 luaK_patchlist(fs, luaK_jump(fs), whileinit); in whilestat()
1005 leaveblock(fs); in whilestat()
1006 luaK_patchtohere(fs, condexit); /* false conditions finish the loop */ in whilestat()
1013 FuncState *fs = ls->fs; in repeatstat() local
1014 int repeat_init = luaK_getlabel(fs); in repeatstat()
1016 enterblock(fs, &bl1, 1); /* loop block */ in repeatstat()
1017 enterblock(fs, &bl2, 0); /* scope block */ in repeatstat()
1023 leaveblock(fs); /* finish scope */ in repeatstat()
1024 luaK_patchlist(ls->fs, condexit, repeat_init); /* close the loop */ in repeatstat()
1028 luaK_patchtohere(ls->fs, condexit); /* else... */ in repeatstat()
1029 leaveblock(fs); /* finish scope... */ in repeatstat()
1030 luaK_patchlist(ls->fs, luaK_jump(fs), repeat_init); /* and repeat */ in repeatstat()
1032 leaveblock(fs); /* finish loop */ in repeatstat()
1041 luaK_exp2nextreg(ls->fs, &e); in exp1()
1049 FuncState *fs = ls->fs; in forbody() local
1053 prep = isnum ? luaK_codeAsBx(fs, OP_FORPREP, base, NO_JUMP) : luaK_jump(fs); in forbody()
1054 enterblock(fs, &bl, 0); /* scope for declared variables */ in forbody()
1056 luaK_reserveregs(fs, nvars); in forbody()
1058 leaveblock(fs); /* end of scope for declared variables */ in forbody()
1059 luaK_patchtohere(fs, prep); in forbody()
1060 endfor = (isnum) ? luaK_codeAsBx(fs, OP_FORLOOP, base, NO_JUMP) : in forbody()
1061 luaK_codeABC(fs, OP_TFORLOOP, base, 0, nvars); in forbody()
1062 luaK_fixline(fs, line); /* pretend that `OP_FOR' starts the loop */ in forbody()
1063 luaK_patchlist(fs, (isnum ? endfor : luaK_jump(fs)), prep + 1); in forbody()
1069 FuncState *fs = ls->fs; in fornum() local
1070 int base = fs->freereg; in fornum()
1082 luaK_codeABx(fs, OP_LOADK, fs->freereg, luaK_numberK(fs, 1)); in fornum()
1083 luaK_reserveregs(fs, 1); in fornum()
1091 FuncState *fs = ls->fs; in forlist() local
1095 int base = fs->freereg; in forlist()
1107 luaK_checkstack(fs, 3); /* extra space to call generator */ in forlist()
1114 FuncState *fs = ls->fs; in forstat() local
1117 enterblock(fs, &bl, 1); /* scope for loop and control variables */ in forstat()
1126 leaveblock(fs); /* loop scope (`break' jumps to this point) */ in forstat()
1143 FuncState *fs = ls->fs; in ifstat() local
1148 luaK_concat(fs, &escapelist, luaK_jump(fs)); in ifstat()
1149 luaK_patchtohere(fs, flist); in ifstat()
1153 luaK_concat(fs, &escapelist, luaK_jump(fs)); in ifstat()
1154 luaK_patchtohere(fs, flist); in ifstat()
1159 luaK_concat(fs, &escapelist, flist); in ifstat()
1160 luaK_patchtohere(fs, escapelist); in ifstat()
1167 FuncState *fs = ls->fs; in localfunc() local
1169 init_exp(&v, VLOCAL, fs->freereg); in localfunc()
1170 luaK_reserveregs(fs, 1); in localfunc()
1173 luaK_storevar(fs, &v, &b); in localfunc()
1175 getlocvar(fs, fs->nactvar - 1).startpc = fs->pc; in localfunc()
1219 luaK_storevar(ls->fs, &v, &b); in funcstat()
1220 luaK_fixline(ls->fs, line); /* definition `happens' in the first line */ in funcstat()
1226 FuncState *fs = ls->fs; in exprstat() local
1230 SETARG_C(getcode(fs, &v.v), 1); /* call statement uses no results */ in exprstat()
1240 FuncState *fs = ls->fs; in retstat() local
1249 luaK_setmultret(fs, &e); in retstat()
1251 SET_OPCODE(getcode(fs,&e), OP_TAILCALL); in retstat()
1252 lua_assert(GETARG_A(getcode(fs,&e)) == fs->nactvar); in retstat()
1254 first = fs->nactvar; in retstat()
1259 first = luaK_exp2anyreg(fs, &e); in retstat()
1261 luaK_exp2nextreg(fs, &e); /* values must go to the `stack' */ in retstat()
1262 first = fs->nactvar; /* return all `active' values */ in retstat()
1263 lua_assert(nret == fs->freereg - first); in retstat()
1267 luaK_ret(fs, first, nret); in retstat()
1332 lua_assert(ls->fs->f->maxstacksize >= ls->fs->freereg && in chunk()
1333 ls->fs->freereg >= ls->fs->nactvar); in chunk()
1334 ls->fs->freereg = ls->fs->nactvar; /* free registers */ in chunk()