Lines Matching +full:1 +full:l
27 #define strcoll(l,r) (strcmp((l),(r))) argument
46 int luaV_tostring (lua_State *L, StkId obj) { in luaV_tostring() argument
52 int l = lua_number2str(s, n); in luaV_tostring() local
53 setsvalue2s(L, obj, luaS_newlstr(L, s, l)); in luaV_tostring()
54 return 1; in luaV_tostring()
59 static void traceexec (lua_State *L) { in traceexec() argument
60 CallInfo *ci = L->ci; in traceexec()
61 lu_byte mask = L->hookmask; in traceexec()
62 int counthook = ((mask & LUA_MASKCOUNT) && L->hookcount == 0); in traceexec()
64 resethookcount(L); /* reset count */ in traceexec()
70 luaD_hook(L, LUA_HOOKCOUNT, -1); /* call count hook */ in traceexec()
73 int npc = pcRel(ci->u.l.savedpc, p); in traceexec()
76 ci->u.l.savedpc <= L->oldpc || /* when jump back (loop), or when */ in traceexec()
77 newline != getfuncline(p, pcRel(L->oldpc, p))) /* enter a new line */ in traceexec()
78 luaD_hook(L, LUA_HOOKLINE, newline); /* call line hook */ in traceexec()
80 L->oldpc = ci->u.l.savedpc; in traceexec()
81 if (L->status == LUA_YIELD) { /* did hook yield? */ in traceexec()
83 L->hookcount = 1; /* undo decrement to zero */ in traceexec()
84 ci->u.l.savedpc--; /* undo increment (resume will increment it again) */ in traceexec()
86 ci->func = L->top - 1; /* protect stack below results */ in traceexec()
87 luaD_throw(L, LUA_YIELD); in traceexec()
92 static void callTM (lua_State *L, const TValue *f, const TValue *p1, in callTM() argument
94 if (L == NULL) return; in callTM()
96 ptrdiff_t result = savestack(L, p3); in callTM()
97 setobj2s(L, L->top++, f); /* push function */ in callTM()
98 setobj2s(L, L->top++, p1); /* 1st argument */ in callTM()
99 setobj2s(L, L->top++, p2); /* 2nd argument */ in callTM()
101 setobj2s(L, L->top++, p3); /* 3rd argument */ in callTM()
103 luaD_call(L, L->top - (4 - hasres), hasres, isLua(L->ci)); in callTM()
105 p3 = restorestack(L, result); in callTM()
106 setobjs2s(L, p3, --L->top); in callTM()
111 void luaV_gettable (lua_State *L, const TValue *t, TValue *key, StkId val) { in luaV_gettable() argument
119 (tm = fasttm(L, h->metatable, TM_INDEX)) == NULL) { /* or no TM? */ in luaV_gettable()
120 setobj2s(L, val, res); in luaV_gettable()
125 else if (ttisnil(tm = luaT_gettmbyobj(L, t, TM_INDEX))) in luaV_gettable()
126 luaG_typeerror(L, t, "index"); in luaV_gettable()
128 callTM(L, tm, t, key, val, 1); in luaV_gettable()
133 luaG_runerror(L, "loop in gettable"); in luaV_gettable()
137 void luaV_settable (lua_State *L, const TValue *t, TValue *key, StkId val) { in luaV_settable() argument
148 ((tm = fasttm(L, h->metatable, TM_NEWINDEX)) == NULL && in luaV_settable()
153 (oldval = luaH_newkey(L, h, key), 1)))) { in luaV_settable()
155 setobj2t(L, oldval, val); /* assign new value to that entry */ in luaV_settable()
157 luaC_barrierback(L, obj2gco(h), val); in luaV_settable()
163 if (ttisnil(tm = luaT_gettmbyobj(L, t, TM_NEWINDEX))) in luaV_settable()
164 luaG_typeerror(L, t, "index"); in luaV_settable()
167 callTM(L, tm, t, key, val, 0); in luaV_settable()
172 luaG_runerror(L, "loop in settable"); in luaV_settable()
176 static int call_binTM (lua_State *L, const TValue *p1, const TValue *p2, in call_binTM() argument
178 const TValue *tm = luaT_gettmbyobj(L, p1, event); /* try first operand */ in call_binTM()
180 tm = luaT_gettmbyobj(L, p2, event); /* try second operand */ in call_binTM()
182 callTM(L, tm, p1, p2, res, 1); in call_binTM()
183 return 1; in call_binTM()
187 static const TValue *get_equalTM (lua_State *L, Table *mt1, Table *mt2, in get_equalTM() argument
189 const TValue *tm1 = fasttm(L, mt1, event); in get_equalTM()
193 tm2 = fasttm(L, mt2, event); in get_equalTM()
201 static int call_orderTM (lua_State *L, const TValue *p1, const TValue *p2, in call_orderTM() argument
203 if (!call_binTM(L, p1, p2, L->top, event)) in call_orderTM()
204 return -1; /* no metamethod */ in call_orderTM()
206 return !l_isfalse(L->top); in call_orderTM()
211 const char *l = getstr(ls); in l_strcmp() local
216 int temp = strcoll(l, r); in l_strcmp()
219 size_t len = strlen(l); /* index of first `\0' in both strings */ in l_strcmp()
221 return (len == ll) ? 0 : 1; in l_strcmp()
222 else if (len == ll) /* l is finished? */ in l_strcmp()
223 return -1; /* l is smaller than r (because r is not finished) */ in l_strcmp()
226 l += len; ll -= len; r += len; lr -= len; in l_strcmp()
232 int luaV_lessthan (lua_State *L, const TValue *l, const TValue *r) { in luaV_lessthan() argument
234 if (ttisnumber(l) && ttisnumber(r)) in luaV_lessthan()
235 return luai_numlt(L, nvalue(l), nvalue(r)); in luaV_lessthan()
236 else if (ttisstring(l) && ttisstring(r)) in luaV_lessthan()
237 return l_strcmp(rawtsvalue(l), rawtsvalue(r)) < 0; in luaV_lessthan()
238 else if ((res = call_orderTM(L, l, r, TM_LT)) < 0) in luaV_lessthan()
239 luaG_ordererror(L, l, r); in luaV_lessthan()
244 int luaV_lessequal (lua_State *L, const TValue *l, const TValue *r) { in luaV_lessequal() argument
246 if (ttisnumber(l) && ttisnumber(r)) in luaV_lessequal()
247 return luai_numle(L, nvalue(l), nvalue(r)); in luaV_lessequal()
248 else if (ttisstring(l) && ttisstring(r)) in luaV_lessequal()
249 return l_strcmp(rawtsvalue(l), rawtsvalue(r)) <= 0; in luaV_lessequal()
250 else if ((res = call_orderTM(L, l, r, TM_LE)) >= 0) /* first try `le' */ in luaV_lessequal()
252 else if ((res = call_orderTM(L, r, l, TM_LT)) < 0) /* else try `lt' */ in luaV_lessequal()
253 luaG_ordererror(L, l, r); in luaV_lessequal()
259 ** equality of Lua values. L == NULL means raw equality (no metamethods)
261 int luaV_equalobj_ (lua_State *L, const TValue *t1, const TValue *t2) { in luaV_equalobj_() argument
265 case LUA_TNIL: return 1; in luaV_equalobj_()
267 case LUA_TBOOLEAN: return bvalue(t1) == bvalue(t2); /* true must be 1 !! */ in luaV_equalobj_()
273 if (uvalue(t1) == uvalue(t2)) return 1; in luaV_equalobj_()
274 else if (L == NULL) return 0; in luaV_equalobj_()
275 tm = get_equalTM(L, uvalue(t1)->metatable, uvalue(t2)->metatable, TM_EQ); in luaV_equalobj_()
279 if (hvalue(t1) == hvalue(t2)) return 1; in luaV_equalobj_()
280 else if (L == NULL) return 0; in luaV_equalobj_()
281 tm = get_equalTM(L, hvalue(t1)->metatable, hvalue(t2)->metatable, TM_EQ); in luaV_equalobj_()
288 if (tm == NULL || L == NULL) return 0; /* no TM? */ in luaV_equalobj_()
289 callTM(L, tm, t1, t2, L->top, 1); /* call TM */ in luaV_equalobj_()
290 return !l_isfalse(L->top); in luaV_equalobj_()
294 void luaV_concat (lua_State *L, int total) { in luaV_concat() argument
297 StkId top = L->top; in luaV_concat()
299 if (!(ttisstring(top-2) || ttisnumber(top-2)) || !tostring(L, top-1)) { in luaV_concat()
300 if (!call_binTM(L, top-2, top-1, top-2, TM_CONCAT)) in luaV_concat()
301 luaG_concaterror(L, top-2, top-1); in luaV_concat()
303 else if (tsvalue(top-1)->len == 0) /* second operand is empty? */ in luaV_concat()
304 (void)tostring(L, top - 2); /* result is first operand */ in luaV_concat()
306 setobjs2s(L, top - 2, top - 1); /* result is second op. */ in luaV_concat()
310 size_t tl = tsvalue(top-1)->len; in luaV_concat()
314 for (i = 1; i < total && tostring(L, top-i-1); i++) { in luaV_concat()
315 size_t l = tsvalue(top-i-1)->len; in luaV_concat() local
316 if (l >= (MAX_SIZET/sizeof(char)) - tl) in luaV_concat()
317 luaG_runerror(L, "string length overflow"); in luaV_concat()
318 tl += l; in luaV_concat()
320 buffer = luaZ_openspace(L, &G(L)->buff, tl); in luaV_concat()
324 size_t l = tsvalue(top-i)->len; in luaV_concat() local
325 memcpy(buffer+tl, svalue(top-i), l * sizeof(char)); in luaV_concat()
326 tl += l; in luaV_concat()
328 setsvalue2s(L, top-n, luaS_newlstr(L, buffer, tl)); in luaV_concat()
330 total -= n-1; /* got 'n' strings to create 1 new */ in luaV_concat()
331 L->top -= n-1; /* popped 'n' strings and pushed one */ in luaV_concat()
332 } while (total > 1); /* repeat until only 1 result left */ in luaV_concat()
336 void luaV_objlen (lua_State *L, StkId ra, const TValue *rb) { in luaV_objlen() argument
341 tm = fasttm(L, h->metatable, TM_LEN); in luaV_objlen()
351 tm = luaT_gettmbyobj(L, rb, TM_LEN); in luaV_objlen()
353 luaG_typeerror(L, rb, "get length of"); in luaV_objlen()
357 callTM(L, tm, rb, rb, ra, 1); in luaV_objlen()
370 ** otherwise 'floor(q) == trunc(q) - 1'.
372 static lua_Number luaV_div (lua_State *L, lua_Number m, lua_Number n) { in luaV_div() argument
373 if ((lua_Unsigned)(n) + 1u <= 1u) { /* special cases: -1 or 0 */ in luaV_div()
375 luaG_runerror(L, "attempt to divide by zero"); in luaV_div()
376 return (0 - m); /* n==-1; avoid overflow with 0x80000...//-1 */ in luaV_div()
381 q -= 1; /* correct result for different rounding */ in luaV_div()
392 static lua_Number luaV_mod (lua_State *L, lua_Number m, lua_Number n) { in luaV_mod() argument
393 if ((lua_Unsigned)(n) + 1u <= 1u) { /* special cases: -1 or 0 */ in luaV_mod()
395 luaG_runerror(L, "attempt to perform 'n%%0'"); in luaV_mod()
396 return 0; /* m % -1 == 0; avoid overflow with 0x80000...%-1 */ in luaV_mod()
410 void luaV_arith (lua_State *L, StkId ra, const TValue *rb, in luaV_arith() argument
422 res = luaV_div(L, nvalue(b), nvalue(c)); in luaV_arith()
424 res = luaV_mod(L, nvalue(b), nvalue(c)); in luaV_arith()
430 else if (!call_binTM(L, rb, rc, ra, op)) in luaV_arith()
431 luaG_aritherror(L, rb, rc); in luaV_arith()
448 if (c->l.upvals[i]->v != v) in getcached()
462 static void pushclosure (lua_State *L, Proto *p, UpVal **encup, StkId base, in pushclosure() argument
467 Closure *ncl = luaF_newLclosure(L, nup); in pushclosure()
468 ncl->l.p = p; in pushclosure()
469 setclLvalue(L, ra, ncl); /* anchor new closure in stack */ in pushclosure()
472 ncl->l.upvals[i] = luaF_findupval(L, base + uv[i].idx); in pushclosure()
474 ncl->l.upvals[i] = encup[uv[i].idx]; in pushclosure()
476 luaC_barrierproto(L, p, ncl); in pushclosure()
484 void luaV_finishOp (lua_State *L) { in luaV_finishOp() argument
485 CallInfo *ci = L->ci; in luaV_finishOp()
486 StkId base = ci->u.l.base; in luaV_finishOp()
487 Instruction inst = *(ci->u.l.savedpc - 1); /* interrupted instruction */ in luaV_finishOp()
493 setobjs2s(L, base + GETARG_A(inst), --L->top); in luaV_finishOp()
497 int res = !l_isfalse(L->top - 1); in luaV_finishOp()
498 L->top--; in luaV_finishOp()
502 ttisnil(luaT_gettmbyobj(L, base + GETARG_B(inst), TM_LE))) in luaV_finishOp()
504 lua_assert(GET_OPCODE(*ci->u.l.savedpc) == OP_JMP); in luaV_finishOp()
506 ci->u.l.savedpc++; /* skip jump instruction */ in luaV_finishOp()
510 StkId top = L->top - 1; /* top when 'call_binTM' was called */ in luaV_finishOp()
512 int total = cast_int(top - 1 - (base + b)); /* yet to concatenate */ in luaV_finishOp()
513 setobj2s(L, top - 2, top); /* put TM result in proper position */ in luaV_finishOp()
514 if (total > 1) { /* are there elements to concat? */ in luaV_finishOp()
515 L->top = top - 1; /* top is one after last element (at top-2) */ in luaV_finishOp()
516 luaV_concat(L, total); /* concat them (may yield again) */ in luaV_finishOp()
519 setobj2s(L, ci->u.l.base + GETARG_A(inst), L->top - 1); in luaV_finishOp()
520 L->top = ci->top; /* restore top */ in luaV_finishOp()
524 lua_assert(GET_OPCODE(*ci->u.l.savedpc) == OP_TFORLOOP); in luaV_finishOp()
525 L->top = ci->top; /* correct top */ in luaV_finishOp()
529 if (GETARG_C(inst) - 1 >= 0) /* nresults >= 0? */ in luaV_finishOp()
530 L->top = ci->top; /* adjust results */ in luaV_finishOp()
546 #define luai_runtimecheck(L, c) /* void */ argument
559 (k + (GETARG_Bx(i) != 0 ? GETARG_Bx(i) - 1 : GETARG_Ax(*ci->u.l.savedpc++)))
565 if (a > 0) luaF_close(L, ci->u.l.base + a - 1); \
566 ci->u.l.savedpc += GETARG_sBx(i) + e; }
569 #define donextjump(ci) { i = *ci->u.l.savedpc; dojump(ci, i, 1); }
572 #define Protect(x) { {x;} base = ci->u.l.base; }
574 #define checkGC(L,c) \ argument
575 Protect( luaC_condGC(L,{L->top = (c); /* limit of live values */ \
576 luaC_step(L); \
577 L->top = ci->top;}) /* restore top */ \
578 luai_threadyield(L); )
586 setnvalue(ra, op(L, nb, nc)); \
588 else { Protect(luaV_arith(L, ra, rb, rc, tm)); } }
592 #define vmcase(l,b) case l: {b} break; argument
593 #define vmcasenb(l,b) case l: {b} /* nb = no break */ argument
595 void luaV_execute (lua_State *L) { in luaV_execute() argument
596 CallInfo *ci = L->ci; in luaV_execute()
601 lua_assert(ci == L->ci); in luaV_execute()
604 base = ci->u.l.base; in luaV_execute()
607 Instruction i = *(ci->u.l.savedpc++); in luaV_execute()
609 if ((L->hookmask & (LUA_MASKLINE | LUA_MASKCOUNT)) && in luaV_execute()
610 (--L->hookcount == 0 || L->hookmask & LUA_MASKLINE)) { in luaV_execute()
611 Protect(traceexec(L)); in luaV_execute()
615 lua_assert(base == ci->u.l.base); in luaV_execute()
616 lua_assert(base <= L->top && L->top < L->stack + L->stacksize); in luaV_execute()
619 setobjs2s(L, ra, RB(i)); in luaV_execute()
623 setobj2s(L, ra, rb); in luaV_execute()
627 lua_assert(GET_OPCODE(*ci->u.l.savedpc) == OP_EXTRAARG); in luaV_execute()
628 rb = k + GETARG_Ax(*ci->u.l.savedpc++); in luaV_execute()
629 setobj2s(L, ra, rb); in luaV_execute()
633 if (GETARG_C(i)) ci->u.l.savedpc++; /* skip next instruction (if C) */ in luaV_execute()
643 setobj2s(L, ra, cl->upvals[b]->v); in luaV_execute()
647 Protect(luaV_gettable(L, cl->upvals[b]->v, RKC(i), ra)); in luaV_execute()
650 Protect(luaV_gettable(L, RB(i), RKC(i), ra)); in luaV_execute()
654 Protect(luaV_settable(L, cl->upvals[a]->v, RKB(i), RKC(i))); in luaV_execute()
658 setobj(L, uv->v, ra); in luaV_execute()
659 luaC_barrier(L, uv, ra); in luaV_execute()
662 Protect(luaV_settable(L, ra, RKB(i), RKC(i))); in luaV_execute()
667 Table *t = luaH_new(L); in luaV_execute()
668 sethvalue(L, ra, t); in luaV_execute()
670 luaH_resize(L, t, luaO_fb2int(b), luaO_fb2int(c)); in luaV_execute()
671 checkGC(L, ra + 1); in luaV_execute()
675 setobjs2s(L, ra+1, rb); in luaV_execute()
676 Protect(luaV_gettable(L, rb, RKC(i), ra)); in luaV_execute()
703 setnvalue(ra, luai_numunm(L, nb)); in luaV_execute()
706 Protect(luaV_arith(L, ra, rb, rb, TM_UNM)); in luaV_execute()
715 Protect(luaV_objlen(L, ra, RB(i))); in luaV_execute()
721 L->top = base + c + 1; /* mark the end of concat operands */ in luaV_execute()
722 Protect(luaV_concat(L, c - b + 1)); in luaV_execute()
725 setobjs2s(L, ra, rb); in luaV_execute()
726 checkGC(L, (ra >= rb ? ra + 1 : rb)); in luaV_execute()
727 L->top = ci->top; /* restore top */ in luaV_execute()
736 if (cast_int(equalobj(L, rb, rc)) != GETARG_A(i)) in luaV_execute()
737 ci->u.l.savedpc++; in luaV_execute()
744 if (luaV_lessthan(L, RKB(i), RKC(i)) != GETARG_A(i)) in luaV_execute()
745 ci->u.l.savedpc++; in luaV_execute()
752 if (luaV_lessequal(L, RKB(i), RKC(i)) != GETARG_A(i)) in luaV_execute()
753 ci->u.l.savedpc++; in luaV_execute()
760 ci->u.l.savedpc++; in luaV_execute()
767 ci->u.l.savedpc++; in luaV_execute()
769 setobjs2s(L, ra, rb); in luaV_execute()
775 int nresults = GETARG_C(i) - 1; in luaV_execute()
776 if (b != 0) L->top = ra+b; /* else previous instruction set top */ in luaV_execute()
777 if (luaD_precall(L, ra, nresults)) { /* C function? */ in luaV_execute()
778 if (nresults >= 0) L->top = ci->top; /* adjust results */ in luaV_execute()
779 base = ci->u.l.base; in luaV_execute()
782 ci = L->ci; in luaV_execute()
789 if (b != 0) L->top = ra+b; /* else previous instruction set top */ in luaV_execute()
790 lua_assert(GETARG_C(i) - 1 == LUA_MULTRET); in luaV_execute()
791 if (luaD_precall(L, ra, LUA_MULTRET)) /* C function? */ in luaV_execute()
792 base = ci->u.l.base; in luaV_execute()
795 CallInfo *nci = L->ci; /* called frame */ in luaV_execute()
800 StkId lim = nci->u.l.base + getproto(nfunc)->numparams; in luaV_execute()
803 if (cl->p->sizep > 0) luaF_close(L, oci->u.l.base); in luaV_execute()
806 setobjs2s(L, ofunc + aux, nfunc + aux); in luaV_execute()
807 oci->u.l.base = ofunc + (nci->u.l.base - nfunc); /* correct base */ in luaV_execute()
808 oci->top = L->top = ofunc + (L->top - nfunc); /* correct top */ in luaV_execute()
809 oci->u.l.savedpc = nci->u.l.savedpc; in luaV_execute()
811 ci = L->ci = oci; /* remove new frame */ in luaV_execute()
812 lua_assert(L->top == oci->u.l.base + getproto(ofunc)->maxstacksize); in luaV_execute()
818 if (b != 0) L->top = ra+b-1; in luaV_execute()
819 if (cl->p->sizep > 0) luaF_close(L, base); in luaV_execute()
820 b = luaD_poscall(L, ra); in luaV_execute()
824 ci = L->ci; in luaV_execute()
825 if (b) L->top = ci->top; in luaV_execute()
827 lua_assert(GET_OPCODE(*((ci)->u.l.savedpc - 1)) == OP_CALL); in luaV_execute()
833 lua_Number idx = luai_numadd(L, nvalue(ra), step); /* increment index */ in luaV_execute()
834 lua_Number limit = nvalue(ra+1); in luaV_execute()
835 if (luai_numlt(L, 0, step) ? luai_numle(L, idx, limit) in luaV_execute()
836 : luai_numle(L, limit, idx)) { in luaV_execute()
837 ci->u.l.savedpc += GETARG_sBx(i); /* jump back */ in luaV_execute()
844 const TValue *plimit = ra+1; in luaV_execute()
847 luaG_runerror(L, LUA_QL("for") " initial value must be a number"); in luaV_execute()
848 else if (!tonumber(plimit, ra+1)) in luaV_execute()
849 luaG_runerror(L, LUA_QL("for") " limit must be a number"); in luaV_execute()
851 luaG_runerror(L, LUA_QL("for") " step must be a number"); in luaV_execute()
852 setnvalue(ra, luai_numsub(L, nvalue(ra), nvalue(pstep))); in luaV_execute()
853 ci->u.l.savedpc += GETARG_sBx(i); in luaV_execute()
857 setobjs2s(L, cb+2, ra+2); in luaV_execute()
858 setobjs2s(L, cb+1, ra+1); in luaV_execute()
859 setobjs2s(L, cb, ra); in luaV_execute()
860 L->top = cb + 3; /* func. + 2 args (state and index) */ in luaV_execute()
861 Protect(luaD_call(L, cb, GETARG_C(i), 1)); in luaV_execute()
862 L->top = ci->top; in luaV_execute()
863 i = *(ci->u.l.savedpc++); /* go to next instruction */ in luaV_execute()
870 if (!ttisnil(ra + 1)) { /* continue loop? */ in luaV_execute()
871 setobjs2s(L, ra, ra + 1); /* save control variable */ in luaV_execute()
872 ci->u.l.savedpc += GETARG_sBx(i); /* jump back */ in luaV_execute()
880 if (n == 0) n = cast_int(L->top - ra) - 1; in luaV_execute()
882 lua_assert(GET_OPCODE(*ci->u.l.savedpc) == OP_EXTRAARG); in luaV_execute()
883 c = GETARG_Ax(*ci->u.l.savedpc++); in luaV_execute()
885 luai_runtimecheck(L, ttistable(ra)); in luaV_execute()
887 last = ((c-1)*LFIELDS_PER_FLUSH) + n; in luaV_execute()
889 luaH_resizearray(L, h, last); /* pre-allocate it at once */ in luaV_execute()
892 luaH_setint(L, h, last--, val); in luaV_execute()
893 luaC_barrierback(L, obj2gco(h), val); in luaV_execute()
895 L->top = ci->top; /* correct top (in case of previous open call) */ in luaV_execute()
901 pushclosure(L, p, cl->upvals, base, ra); /* create a new one */ in luaV_execute()
903 setclLvalue(L, ra, ncl); /* push cashed closure */ in luaV_execute()
904 checkGC(L, ra + 1); in luaV_execute()
907 int b = GETARG_B(i) - 1; in luaV_execute()
909 int n = cast_int(base - ci->func) - cl->p->numparams - 1; in luaV_execute()
912 Protect(luaD_checkstack(L, n)); in luaV_execute()
914 L->top = ra + n; in luaV_execute()
918 setobjs2s(L, ra + j, base - n + j); in luaV_execute()