Lines Matching refs:L

47 int luaV_tostring (lua_State *L, StkId obj) {  in luaV_tostring()  argument
54 setsvalue2s(L, obj, luaS_new(L, s)); in luaV_tostring()
60 static void traceexec (lua_State *L, const Instruction *pc) { in traceexec() argument
61 lu_byte mask = L->hookmask; in traceexec()
62 const Instruction *oldpc = L->savedpc; in traceexec()
63 L->savedpc = pc; in traceexec()
64 if ((mask & LUA_MASKCOUNT) && L->hookcount == 0) { in traceexec()
65 resethookcount(L); in traceexec()
66 luaD_callhook(L, LUA_HOOKCOUNT, -1); in traceexec()
69 Proto *p = ci_func(L->ci)->l.p; in traceexec()
75 luaD_callhook(L, LUA_HOOKLINE, newline); in traceexec()
80 static void callTMres (lua_State *L, StkId res, const TValue *f, in callTMres() argument
82 ptrdiff_t result = savestack(L, res); in callTMres()
83 setobj2s(L, L->top, f); /* push function */ in callTMres()
84 setobj2s(L, L->top+1, p1); /* 1st argument */ in callTMres()
85 setobj2s(L, L->top+2, p2); /* 2nd argument */ in callTMres()
86 luaD_checkstack(L, 3); in callTMres()
87 L->top += 3; in callTMres()
88 luaD_call(L, L->top - 3, 1); in callTMres()
89 res = restorestack(L, result); in callTMres()
90 L->top--; in callTMres()
91 setobjs2s(L, res, L->top); in callTMres()
96 static void callTM (lua_State *L, const TValue *f, const TValue *p1, in callTM() argument
98 setobj2s(L, L->top, f); /* push function */ in callTM()
99 setobj2s(L, L->top+1, p1); /* 1st argument */ in callTM()
100 setobj2s(L, L->top+2, p2); /* 2nd argument */ in callTM()
101 setobj2s(L, L->top+3, p3); /* 3th argument */ in callTM()
102 luaD_checkstack(L, 4); in callTM()
103 L->top += 4; in callTM()
104 luaD_call(L, L->top - 4, 0); in callTM()
108 void luaV_gettable (lua_State *L, const TValue *t, TValue *key, StkId val) { in luaV_gettable() argument
116 (tm = fasttm(L, h->metatable, TM_INDEX)) == NULL) { /* or no TM? */ in luaV_gettable()
117 setobj2s(L, val, res); in luaV_gettable()
122 else if (ttisnil(tm = luaT_gettmbyobj(L, t, TM_INDEX))) in luaV_gettable()
123 luaG_typeerror(L, t, "index"); in luaV_gettable()
125 callTMres(L, val, tm, t, key); in luaV_gettable()
130 luaG_runerror(L, "loop in gettable"); in luaV_gettable()
134 void luaV_settable (lua_State *L, const TValue *t, TValue *key, StkId val) { in luaV_settable() argument
141 TValue *oldval = luaH_set(L, h, key); /* do a primitive set */ in luaV_settable()
143 (tm = fasttm(L, h->metatable, TM_NEWINDEX)) == NULL) { /* or no TM? */ in luaV_settable()
144 setobj2t(L, oldval, val); in luaV_settable()
146 luaC_barriert(L, h, val); in luaV_settable()
151 else if (ttisnil(tm = luaT_gettmbyobj(L, t, TM_NEWINDEX))) in luaV_settable()
152 luaG_typeerror(L, t, "index"); in luaV_settable()
154 callTM(L, tm, t, key, val); in luaV_settable()
158 setobj(L, &temp, tm); /* avoid pointing inside table (may rehash) */ in luaV_settable()
161 luaG_runerror(L, "loop in settable"); in luaV_settable()
165 static int call_binTM (lua_State *L, const TValue *p1, const TValue *p2, in call_binTM() argument
167 const TValue *tm = luaT_gettmbyobj(L, p1, event); /* try first operand */ in call_binTM()
169 tm = luaT_gettmbyobj(L, p2, event); /* try second operand */ in call_binTM()
171 callTMres(L, res, tm, p1, p2); in call_binTM()
176 static const TValue *get_compTM (lua_State *L, Table *mt1, Table *mt2, in get_compTM() argument
178 const TValue *tm1 = fasttm(L, mt1, event); in get_compTM()
182 tm2 = fasttm(L, mt2, event); in get_compTM()
190 static int call_orderTM (lua_State *L, const TValue *p1, const TValue *p2, in call_orderTM() argument
192 const TValue *tm1 = luaT_gettmbyobj(L, p1, event); in call_orderTM()
195 tm2 = luaT_gettmbyobj(L, p2, event); in call_orderTM()
198 callTMres(L, L->top, tm1, p1, p2); in call_orderTM()
199 return !l_isfalse(L->top); in call_orderTM()
225 int luaV_lessthan (lua_State *L, const TValue *l, const TValue *r) { in luaV_lessthan() argument
228 return luaG_ordererror(L, l, r); in luaV_lessthan()
233 else if ((res = call_orderTM(L, l, r, TM_LT)) != -1) in luaV_lessthan()
235 return luaG_ordererror(L, l, r); in luaV_lessthan()
239 static int lessequal (lua_State *L, const TValue *l, const TValue *r) { in lessequal() argument
242 return luaG_ordererror(L, l, r); in lessequal()
247 else if ((res = call_orderTM(L, l, r, TM_LE)) != -1) /* first try `le' */ in lessequal()
249 else if ((res = call_orderTM(L, r, l, TM_LT)) != -1) /* else try `lt' */ in lessequal()
251 return luaG_ordererror(L, l, r); in lessequal()
255 int luaV_equalval (lua_State *L, const TValue *t1, const TValue *t2) { in luaV_equalval() argument
265 tm = get_compTM(L, uvalue(t1)->metatable, uvalue(t2)->metatable, in luaV_equalval()
271 tm = get_compTM(L, hvalue(t1)->metatable, hvalue(t2)->metatable, TM_EQ); in luaV_equalval()
277 callTMres(L, L->top, tm, t1, t2); /* call TM */ in luaV_equalval()
278 return !l_isfalse(L->top); in luaV_equalval()
282 void luaV_concat (lua_State *L, int total, int last) { in luaV_concat() argument
284 StkId top = L->base + last + 1; in luaV_concat()
286 if (!(ttisstring(top-2) || ttisnumber(top-2)) || !tostring(L, top-1)) { in luaV_concat()
287 if (!call_binTM(L, top-2, top-1, top-2, TM_CONCAT)) in luaV_concat()
288 luaG_concaterror(L, top-2, top-1); in luaV_concat()
290 (void)tostring(L, top - 2); /* result is first op (as string) */ in luaV_concat()
297 for (n = 1; n < total && tostring(L, top-n-1); n++) { in luaV_concat()
299 if (l >= MAX_SIZET - tl) luaG_runerror(L, "string length overflow"); in luaV_concat()
302 buffer = luaZ_openspace(L, &G(L)->buff, tl); in luaV_concat()
309 setsvalue2s(L, top-n, luaS_newlstr(L, buffer, tl)); in luaV_concat()
317 static void Arith (lua_State *L, StkId ra, const TValue *rb, in Arith() argument
335 else if (!call_binTM(L, rb, rc, ra, op)) in Arith()
336 luaG_aritherror(L, rb, rc); in Arith()
345 #define runtime_check(L, c) { if (!(c)) break; } argument
358 #define dojump(L,pc,i) {(pc) += (i); luai_threadyield(L);} argument
361 #define Protect(x) { L->savedpc = pc; {x;}; base = L->base; }
372 Protect(Arith(L, ra, rb, rc, tm)); \
377 void luaV_execute (lua_State *L, int nexeccalls) { in luaV_execute() argument
383 lua_assert(isLua(L->ci)); in luaV_execute()
384 pc = L->savedpc; in luaV_execute()
385 cl = &clvalue(L->ci->func)->l; in luaV_execute()
386 base = L->base; in luaV_execute()
392 if ((L->hookmask & (LUA_MASKLINE | LUA_MASKCOUNT)) && in luaV_execute()
393 (--L->hookcount == 0 || L->hookmask & LUA_MASKLINE)) { in luaV_execute()
394 traceexec(L, pc); in luaV_execute()
395 if (L->status == LUA_YIELD) { /* did hook yield? */ in luaV_execute()
396 L->savedpc = pc - 1; in luaV_execute()
399 base = L->base; in luaV_execute()
403 lua_assert(base == L->base && L->base == L->ci->base); in luaV_execute()
404 lua_assert(base <= L->top && L->top <= L->stack + L->stacksize); in luaV_execute()
405 lua_assert(L->top == L->ci->top || luaG_checkopenop(i)); in luaV_execute()
408 setobjs2s(L, ra, RB(i)); in luaV_execute()
412 setobj2s(L, ra, KBx(i)); in luaV_execute()
429 setobj2s(L, ra, cl->upvals[b]->v); in luaV_execute()
435 sethvalue(L, &g, cl->env); in luaV_execute()
437 Protect(luaV_gettable(L, &g, rb, ra)); in luaV_execute()
441 Protect(luaV_gettable(L, RB(i), RKC(i), ra)); in luaV_execute()
446 sethvalue(L, &g, cl->env); in luaV_execute()
448 Protect(luaV_settable(L, &g, KBx(i), ra)); in luaV_execute()
453 setobj(L, uv->v, ra); in luaV_execute()
454 luaC_barrier(L, uv, ra); in luaV_execute()
458 Protect(luaV_settable(L, ra, RKB(i), RKC(i))); in luaV_execute()
464 sethvalue(L, ra, luaH_new(L, luaO_fb2int(b), luaO_fb2int(c))); in luaV_execute()
465 Protect(luaC_checkGC(L)); in luaV_execute()
470 setobjs2s(L, ra+1, rb); in luaV_execute()
471 Protect(luaV_gettable(L, rb, RKC(i), ra)); in luaV_execute()
505 Protect(Arith(L, ra, rb, rb, TM_UNM)); in luaV_execute()
527 if (!call_binTM(L, rb, luaO_nilobject, ra, TM_LEN)) in luaV_execute()
528 luaG_typeerror(L, rb, "get length of"); in luaV_execute()
537 Protect(luaV_concat(L, c-b+1, c); luaC_checkGC(L)); in luaV_execute()
538 setobjs2s(L, RA(i), base+b); in luaV_execute()
542 dojump(L, pc, GETARG_sBx(i)); in luaV_execute()
549 if (equalobj(L, rb, rc) == GETARG_A(i)) in luaV_execute()
550 dojump(L, pc, GETARG_sBx(*pc)); in luaV_execute()
557 if (luaV_lessthan(L, RKB(i), RKC(i)) == GETARG_A(i)) in luaV_execute()
558 dojump(L, pc, GETARG_sBx(*pc)); in luaV_execute()
565 if (lessequal(L, RKB(i), RKC(i)) == GETARG_A(i)) in luaV_execute()
566 dojump(L, pc, GETARG_sBx(*pc)); in luaV_execute()
573 dojump(L, pc, GETARG_sBx(*pc)); in luaV_execute()
580 setobjs2s(L, ra, rb); in luaV_execute()
581 dojump(L, pc, GETARG_sBx(*pc)); in luaV_execute()
589 if (b != 0) L->top = ra+b; /* else previous instruction set top */ in luaV_execute()
590 L->savedpc = pc; in luaV_execute()
591 switch (luaD_precall(L, ra, nresults)) { in luaV_execute()
598 if (nresults >= 0) L->top = L->ci->top; in luaV_execute()
599 base = L->base; in luaV_execute()
609 if (b != 0) L->top = ra+b; /* else previous instruction set top */ in luaV_execute()
610 L->savedpc = pc; in luaV_execute()
612 switch (luaD_precall(L, ra, LUA_MULTRET)) { in luaV_execute()
615 CallInfo *ci = L->ci - 1; /* previous frame */ in luaV_execute()
619 if (L->openupval) luaF_close(L, ci->base); in luaV_execute()
620 L->base = ci->base = ci->func + ((ci+1)->base - pfunc); in luaV_execute()
621 for (aux = 0; pfunc+aux < L->top; aux++) /* move frame down */ in luaV_execute()
622 setobjs2s(L, func+aux, pfunc+aux); in luaV_execute()
623 ci->top = L->top = func+aux; /* correct top */ in luaV_execute()
624 lua_assert(L->top == L->base + clvalue(func)->l.p->maxstacksize); in luaV_execute()
625 ci->savedpc = L->savedpc; in luaV_execute()
627 L->ci--; /* remove new frame */ in luaV_execute()
631 base = L->base; in luaV_execute()
641 if (b != 0) L->top = ra+b-1; in luaV_execute()
642 if (L->openupval) luaF_close(L, base); in luaV_execute()
643 L->savedpc = pc; in luaV_execute()
644 b = luaD_poscall(L, ra); in luaV_execute()
648 if (b) L->top = L->ci->top; in luaV_execute()
649 lua_assert(isLua(L->ci)); in luaV_execute()
650 lua_assert(GET_OPCODE(*((L->ci)->savedpc - 1)) == OP_CALL); in luaV_execute()
660 dojump(L, pc, GETARG_sBx(i)); /* jump back */ in luaV_execute()
670 L->savedpc = pc; /* next steps may throw errors */ in luaV_execute()
672 luaG_runerror(L, LUA_QL("for") " initial value must be a number"); in luaV_execute()
674 luaG_runerror(L, LUA_QL("for") " limit must be a number"); in luaV_execute()
676 luaG_runerror(L, LUA_QL("for") " step must be a number"); in luaV_execute()
678 dojump(L, pc, GETARG_sBx(i)); in luaV_execute()
683 setobjs2s(L, cb+2, ra+2); in luaV_execute()
684 setobjs2s(L, cb+1, ra+1); in luaV_execute()
685 setobjs2s(L, cb, ra); in luaV_execute()
686 L->top = cb+3; /* func. + 2 args (state and index) */ in luaV_execute()
687 Protect(luaD_call(L, cb, GETARG_C(i))); in luaV_execute()
688 L->top = L->ci->top; in luaV_execute()
691 setobjs2s(L, cb-1, cb); /* save control variable */ in luaV_execute()
692 dojump(L, pc, GETARG_sBx(*pc)); /* jump back */ in luaV_execute()
703 n = cast_int(L->top - ra) - 1; in luaV_execute()
704 L->top = L->ci->top; in luaV_execute()
707 runtime_check(L, ttistable(ra)); in luaV_execute()
711 luaH_resizearray(L, h, last); /* pre-alloc it at once */ in luaV_execute()
714 setobj2t(L, luaH_setnum(L, h, last--), val); in luaV_execute()
715 luaC_barriert(L, h, val); in luaV_execute()
720 luaF_close(L, ra); in luaV_execute()
729 ncl = luaF_newLclosure(L, nup, cl->env); in luaV_execute()
736 ncl->l.upvals[j] = luaF_findupval(L, base + GETARG_B(*pc)); in luaV_execute()
739 setclvalue(L, ra, ncl); in luaV_execute()
740 Protect(luaC_checkGC(L)); in luaV_execute()
746 CallInfo *ci = L->ci; in luaV_execute()
749 Protect(luaD_checkstack(L, n)); in luaV_execute()
752 L->top = ra + n; in luaV_execute()
756 setobjs2s(L, ra + j, ci->base - n + j); in luaV_execute()