Lines Matching refs:L

48 #define api_checkvalidindex(L, o)  api_check(L, isvalid(o), "invalid index")  argument
50 #define api_checkstackindex(L, i, o) \ argument
51 api_check(L, isstackindex(i, o), "index not in the stack")
54 static TValue *index2addr (lua_State *L, int idx) { in index2addr() argument
55 CallInfo *ci = L->ci; in index2addr()
58 api_check(L, idx <= ci->top - (ci->func + 1), "unacceptable index"); in index2addr()
59 if (o >= L->top) return NONVALIDVALUE; in index2addr()
63 api_check(L, idx != 0 && -idx <= L->top - (ci->func + 1), "invalid index"); in index2addr()
64 return L->top + idx; in index2addr()
67 return &G(L)->l_registry; in index2addr()
70 api_check(L, idx <= MAXUPVAL + 1, "upvalue index too large"); in index2addr()
85 static void growstack (lua_State *L, void *ud) { in growstack() argument
87 luaD_growstack(L, size); in growstack()
91 LUA_API int lua_checkstack (lua_State *L, int size) { in lua_checkstack() argument
93 CallInfo *ci = L->ci; in lua_checkstack()
94 lua_lock(L); in lua_checkstack()
95 if (L->stack_last - L->top > size) /* stack large enough? */ in lua_checkstack()
98 int inuse = cast_int(L->top - L->stack) + EXTRA_STACK; in lua_checkstack()
102 res = (luaD_rawrunprotected(L, &growstack, &size) == LUA_OK); in lua_checkstack()
104 if (res && ci->top < L->top + size) in lua_checkstack()
105 ci->top = L->top + size; /* adjust frame top */ in lua_checkstack()
106 lua_unlock(L); in lua_checkstack()
126 LUA_API lua_CFunction lua_atpanic (lua_State *L, lua_CFunction panicf) { in lua_atpanic() argument
128 lua_lock(L); in lua_atpanic()
129 old = G(L)->panic; in lua_atpanic()
130 G(L)->panic = panicf; in lua_atpanic()
131 lua_unlock(L); in lua_atpanic()
136 LUA_API const lua_Number *lua_version (lua_State *L) { in lua_version() argument
138 if (L == NULL) return &version; in lua_version()
139 else return G(L)->version; in lua_version()
152 LUA_API int lua_absindex (lua_State *L, int idx) { in lua_absindex() argument
155 : cast_int(L->top - L->ci->func + idx); in lua_absindex()
159 LUA_API int lua_gettop (lua_State *L) { in lua_gettop() argument
160 return cast_int(L->top - (L->ci->func + 1)); in lua_gettop()
164 LUA_API void lua_settop (lua_State *L, int idx) { in lua_settop() argument
165 StkId func = L->ci->func; in lua_settop()
166 lua_lock(L); in lua_settop()
168 api_check(L, idx <= L->stack_last - (func + 1), "new top too large"); in lua_settop()
169 while (L->top < (func + 1) + idx) in lua_settop()
170 setnilvalue(L->top++); in lua_settop()
171 L->top = (func + 1) + idx; in lua_settop()
174 api_check(L, -(idx+1) <= (L->top - (func + 1)), "invalid new top"); in lua_settop()
175 L->top += idx+1; /* `subtract' index (index is negative) */ in lua_settop()
177 lua_unlock(L); in lua_settop()
181 LUA_API void lua_remove (lua_State *L, int idx) { in lua_remove() argument
183 lua_lock(L); in lua_remove()
184 p = index2addr(L, idx); in lua_remove()
185 api_checkstackindex(L, idx, p); in lua_remove()
186 while (++p < L->top) setobjs2s(L, p-1, p); in lua_remove()
187 L->top--; in lua_remove()
188 lua_unlock(L); in lua_remove()
192 LUA_API void lua_insert (lua_State *L, int idx) { in lua_insert() argument
195 lua_lock(L); in lua_insert()
196 p = index2addr(L, idx); in lua_insert()
197 api_checkstackindex(L, idx, p); in lua_insert()
198 for (q = L->top; q > p; q--) /* use L->top as a temporary */ in lua_insert()
199 setobjs2s(L, q, q - 1); in lua_insert()
200 setobjs2s(L, p, L->top); in lua_insert()
201 lua_unlock(L); in lua_insert()
205 static void moveto (lua_State *L, TValue *fr, int idx) { in moveto() argument
206 TValue *to = index2addr(L, idx); in moveto()
207 api_checkvalidindex(L, to); in moveto()
208 setobj(L, to, fr); in moveto()
210 luaC_barrier(L, clCvalue(L->ci->func), fr); in moveto()
216 LUA_API void lua_replace (lua_State *L, int idx) { in lua_replace() argument
217 lua_lock(L); in lua_replace()
218 api_checknelems(L, 1); in lua_replace()
219 moveto(L, L->top - 1, idx); in lua_replace()
220 L->top--; in lua_replace()
221 lua_unlock(L); in lua_replace()
225 LUA_API void lua_copy (lua_State *L, int fromidx, int toidx) { in lua_copy() argument
227 lua_lock(L); in lua_copy()
228 fr = index2addr(L, fromidx); in lua_copy()
229 moveto(L, fr, toidx); in lua_copy()
230 lua_unlock(L); in lua_copy()
234 LUA_API void lua_pushvalue (lua_State *L, int idx) { in lua_pushvalue() argument
235 lua_lock(L); in lua_pushvalue()
236 setobj2s(L, L->top, index2addr(L, idx)); in lua_pushvalue()
237 api_incr_top(L); in lua_pushvalue()
238 lua_unlock(L); in lua_pushvalue()
248 LUA_API int lua_type (lua_State *L, int idx) { in lua_type() argument
249 StkId o = index2addr(L, idx); in lua_type()
254 LUA_API const char *lua_typename (lua_State *L, int t) { in lua_typename() argument
255 UNUSED(L); in lua_typename()
260 LUA_API int lua_iscfunction (lua_State *L, int idx) { in lua_iscfunction() argument
261 StkId o = index2addr(L, idx); in lua_iscfunction()
266 LUA_API int lua_isnumber (lua_State *L, int idx) { in lua_isnumber() argument
268 const TValue *o = index2addr(L, idx); in lua_isnumber()
273 LUA_API int lua_isstring (lua_State *L, int idx) { in lua_isstring() argument
274 int t = lua_type(L, idx); in lua_isstring()
279 LUA_API int lua_isuserdata (lua_State *L, int idx) { in lua_isuserdata() argument
280 const TValue *o = index2addr(L, idx); in lua_isuserdata()
285 LUA_API int lua_rawequal (lua_State *L, int index1, int index2) { in lua_rawequal() argument
286 StkId o1 = index2addr(L, index1); in lua_rawequal()
287 StkId o2 = index2addr(L, index2); in lua_rawequal()
292 LUA_API void lua_arith (lua_State *L, int op) { in lua_arith() argument
295 lua_lock(L); in lua_arith()
297 api_checknelems(L, 2); in lua_arith()
299 api_checknelems(L, 1); in lua_arith()
300 setobjs2s(L, L->top, L->top - 1); in lua_arith()
301 L->top++; in lua_arith()
303 o1 = L->top - 2; in lua_arith()
304 o2 = L->top - 1; in lua_arith()
309 luaV_arith(L, o1, o1, o2, cast(TMS, op - LUA_OPADD + TM_ADD)); in lua_arith()
310 L->top--; in lua_arith()
311 lua_unlock(L); in lua_arith()
315 LUA_API int lua_compare (lua_State *L, int index1, int index2, int op) { in lua_compare() argument
318 lua_lock(L); /* may call tag method */ in lua_compare()
319 o1 = index2addr(L, index1); in lua_compare()
320 o2 = index2addr(L, index2); in lua_compare()
323 case LUA_OPEQ: i = equalobj(L, o1, o2); break; in lua_compare()
324 case LUA_OPLT: i = luaV_lessthan(L, o1, o2); break; in lua_compare()
325 case LUA_OPLE: i = luaV_lessequal(L, o1, o2); break; in lua_compare()
326 default: api_check(L, 0, "invalid option"); in lua_compare()
329 lua_unlock(L); in lua_compare()
334 LUA_API lua_Number lua_tonumberx (lua_State *L, int idx, int *isnum) { in lua_tonumberx() argument
336 const TValue *o = index2addr(L, idx); in lua_tonumberx()
348 LUA_API lua_Integer lua_tointegerx (lua_State *L, int idx, int *isnum) { in lua_tointegerx() argument
350 const TValue *o = index2addr(L, idx); in lua_tointegerx()
365 LUA_API lua_Unsigned lua_tounsignedx (lua_State *L, int idx, int *isnum) { in lua_tounsignedx() argument
367 const TValue *o = index2addr(L, idx); in lua_tounsignedx()
382 LUA_API int lua_toboolean (lua_State *L, int idx) { in lua_toboolean() argument
383 const TValue *o = index2addr(L, idx); in lua_toboolean()
388 LUA_API const char *lua_tolstring (lua_State *L, int idx, size_t *len) { in lua_tolstring() argument
389 StkId o = index2addr(L, idx); in lua_tolstring()
391 lua_lock(L); /* `luaV_tostring' may create a new string */ in lua_tolstring()
392 if (!luaV_tostring(L, o)) { /* conversion failed? */ in lua_tolstring()
394 lua_unlock(L); in lua_tolstring()
397 luaC_checkGC(L); in lua_tolstring()
398 o = index2addr(L, idx); /* previous call may reallocate the stack */ in lua_tolstring()
399 lua_unlock(L); in lua_tolstring()
406 LUA_API size_t lua_rawlen (lua_State *L, int idx) { in lua_rawlen() argument
407 StkId o = index2addr(L, idx); in lua_rawlen()
417 LUA_API lua_CFunction lua_tocfunction (lua_State *L, int idx) { in lua_tocfunction() argument
418 StkId o = index2addr(L, idx); in lua_tocfunction()
426 LUA_API void *lua_touserdata (lua_State *L, int idx) { in lua_touserdata() argument
427 StkId o = index2addr(L, idx); in lua_touserdata()
436 LUA_API lua_State *lua_tothread (lua_State *L, int idx) { in lua_tothread() argument
437 StkId o = index2addr(L, idx); in lua_tothread()
442 LUA_API const void *lua_topointer (lua_State *L, int idx) { in lua_topointer() argument
443 StkId o = index2addr(L, idx); in lua_topointer()
452 return lua_touserdata(L, idx); in lua_topointer()
464 LUA_API void lua_pushnil (lua_State *L) { in lua_pushnil() argument
465 lua_lock(L); in lua_pushnil()
466 setnilvalue(L->top); in lua_pushnil()
467 api_incr_top(L); in lua_pushnil()
468 lua_unlock(L); in lua_pushnil()
472 LUA_API void lua_pushnumber (lua_State *L, lua_Number n) { in lua_pushnumber() argument
473 lua_lock(L); in lua_pushnumber()
474 setnvalue(L->top, n); in lua_pushnumber()
475 luai_checknum(L, L->top, in lua_pushnumber()
476 luaG_runerror(L, "C API - attempt to push a signaling NaN")); in lua_pushnumber()
477 api_incr_top(L); in lua_pushnumber()
478 lua_unlock(L); in lua_pushnumber()
482 LUA_API void lua_pushinteger (lua_State *L, lua_Integer n) { in lua_pushinteger() argument
483 lua_lock(L); in lua_pushinteger()
484 setnvalue(L->top, cast_num(n)); in lua_pushinteger()
485 api_incr_top(L); in lua_pushinteger()
486 lua_unlock(L); in lua_pushinteger()
490 LUA_API void lua_pushunsigned (lua_State *L, lua_Unsigned u) { in lua_pushunsigned() argument
492 lua_lock(L); in lua_pushunsigned()
494 setnvalue(L->top, n); in lua_pushunsigned()
495 api_incr_top(L); in lua_pushunsigned()
496 lua_unlock(L); in lua_pushunsigned()
500 LUA_API const char *lua_pushlstring (lua_State *L, const char *s, size_t len) { in lua_pushlstring() argument
502 lua_lock(L); in lua_pushlstring()
503 luaC_checkGC(L); in lua_pushlstring()
504 ts = luaS_newlstr(L, s, len); in lua_pushlstring()
505 setsvalue2s(L, L->top, ts); in lua_pushlstring()
506 api_incr_top(L); in lua_pushlstring()
507 lua_unlock(L); in lua_pushlstring()
512 LUA_API const char *lua_pushstring (lua_State *L, const char *s) { in lua_pushstring() argument
514 lua_pushnil(L); in lua_pushstring()
519 lua_lock(L); in lua_pushstring()
520 luaC_checkGC(L); in lua_pushstring()
521 ts = luaS_new(L, s); in lua_pushstring()
522 setsvalue2s(L, L->top, ts); in lua_pushstring()
523 api_incr_top(L); in lua_pushstring()
524 lua_unlock(L); in lua_pushstring()
530 LUA_API const char *lua_pushvfstring (lua_State *L, const char *fmt, in lua_pushvfstring() argument
533 lua_lock(L); in lua_pushvfstring()
534 luaC_checkGC(L); in lua_pushvfstring()
535 ret = luaO_pushvfstring(L, fmt, argp); in lua_pushvfstring()
536 lua_unlock(L); in lua_pushvfstring()
541 LUA_API const char *lua_pushfstring (lua_State *L, const char *fmt, ...) { in lua_pushfstring() argument
544 lua_lock(L); in lua_pushfstring()
545 luaC_checkGC(L); in lua_pushfstring()
547 ret = luaO_pushvfstring(L, fmt, argp); in lua_pushfstring()
549 lua_unlock(L); in lua_pushfstring()
554 LUA_API void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n) { in lua_pushcclosure() argument
555 lua_lock(L); in lua_pushcclosure()
557 setfvalue(L->top, fn); in lua_pushcclosure()
561 api_checknelems(L, n); in lua_pushcclosure()
562 api_check(L, n <= MAXUPVAL, "upvalue index too large"); in lua_pushcclosure()
563 luaC_checkGC(L); in lua_pushcclosure()
564 cl = luaF_newCclosure(L, n); in lua_pushcclosure()
566 L->top -= n; in lua_pushcclosure()
568 setobj2n(L, &cl->c.upvalue[n], L->top + n); in lua_pushcclosure()
569 setclCvalue(L, L->top, cl); in lua_pushcclosure()
571 api_incr_top(L); in lua_pushcclosure()
572 lua_unlock(L); in lua_pushcclosure()
576 LUA_API void lua_pushboolean (lua_State *L, int b) { in lua_pushboolean() argument
577 lua_lock(L); in lua_pushboolean()
578 setbvalue(L->top, (b != 0)); /* ensure that true is 1 */ in lua_pushboolean()
579 api_incr_top(L); in lua_pushboolean()
580 lua_unlock(L); in lua_pushboolean()
584 LUA_API void lua_pushlightuserdata (lua_State *L, void *p) { in lua_pushlightuserdata() argument
585 lua_lock(L); in lua_pushlightuserdata()
586 setpvalue(L->top, p); in lua_pushlightuserdata()
587 api_incr_top(L); in lua_pushlightuserdata()
588 lua_unlock(L); in lua_pushlightuserdata()
592 LUA_API int lua_pushthread (lua_State *L) { in lua_pushthread() argument
593 lua_lock(L); in lua_pushthread()
594 setthvalue(L, L->top, L); in lua_pushthread()
595 api_incr_top(L); in lua_pushthread()
596 lua_unlock(L); in lua_pushthread()
597 return (G(L)->mainthread == L); in lua_pushthread()
607 LUA_API void lua_getglobal (lua_State *L, const char *var) { in lua_getglobal() argument
608 Table *reg = hvalue(&G(L)->l_registry); in lua_getglobal()
610 lua_lock(L); in lua_getglobal()
612 setsvalue2s(L, L->top++, luaS_new(L, var)); in lua_getglobal()
613 luaV_gettable(L, gt, L->top - 1, L->top - 1); in lua_getglobal()
614 lua_unlock(L); in lua_getglobal()
618 LUA_API void lua_gettable (lua_State *L, int idx) { in lua_gettable() argument
620 lua_lock(L); in lua_gettable()
621 t = index2addr(L, idx); in lua_gettable()
622 luaV_gettable(L, t, L->top - 1, L->top - 1); in lua_gettable()
623 lua_unlock(L); in lua_gettable()
627 LUA_API void lua_getfield (lua_State *L, int idx, const char *k) { in lua_getfield() argument
629 lua_lock(L); in lua_getfield()
630 t = index2addr(L, idx); in lua_getfield()
631 setsvalue2s(L, L->top, luaS_new(L, k)); in lua_getfield()
632 api_incr_top(L); in lua_getfield()
633 luaV_gettable(L, t, L->top - 1, L->top - 1); in lua_getfield()
634 lua_unlock(L); in lua_getfield()
638 LUA_API void lua_rawget (lua_State *L, int idx) { in lua_rawget() argument
640 lua_lock(L); in lua_rawget()
641 t = index2addr(L, idx); in lua_rawget()
642 api_check(L, ttistable(t), "table expected"); in lua_rawget()
643 setobj2s(L, L->top - 1, luaH_get(hvalue(t), L->top - 1)); in lua_rawget()
644 lua_unlock(L); in lua_rawget()
648 LUA_API void lua_rawgeti (lua_State *L, int idx, int n) { in lua_rawgeti() argument
650 lua_lock(L); in lua_rawgeti()
651 t = index2addr(L, idx); in lua_rawgeti()
652 api_check(L, ttistable(t), "table expected"); in lua_rawgeti()
653 setobj2s(L, L->top, luaH_getint(hvalue(t), n)); in lua_rawgeti()
654 api_incr_top(L); in lua_rawgeti()
655 lua_unlock(L); in lua_rawgeti()
659 LUA_API void lua_rawgetp (lua_State *L, int idx, const void *p) { in lua_rawgetp() argument
662 lua_lock(L); in lua_rawgetp()
663 t = index2addr(L, idx); in lua_rawgetp()
664 api_check(L, ttistable(t), "table expected"); in lua_rawgetp()
666 setobj2s(L, L->top, luaH_get(hvalue(t), &k)); in lua_rawgetp()
667 api_incr_top(L); in lua_rawgetp()
668 lua_unlock(L); in lua_rawgetp()
672 LUA_API void lua_createtable (lua_State *L, int narray, int nrec) { in lua_createtable() argument
674 lua_lock(L); in lua_createtable()
675 luaC_checkGC(L); in lua_createtable()
676 t = luaH_new(L); in lua_createtable()
677 sethvalue(L, L->top, t); in lua_createtable()
678 api_incr_top(L); in lua_createtable()
680 luaH_resize(L, t, narray, nrec); in lua_createtable()
681 lua_unlock(L); in lua_createtable()
685 LUA_API int lua_getmetatable (lua_State *L, int objindex) { in lua_getmetatable() argument
689 lua_lock(L); in lua_getmetatable()
690 obj = index2addr(L, objindex); in lua_getmetatable()
699 mt = G(L)->mt[ttypenv(obj)]; in lua_getmetatable()
705 sethvalue(L, L->top, mt); in lua_getmetatable()
706 api_incr_top(L); in lua_getmetatable()
709 lua_unlock(L); in lua_getmetatable()
714 LUA_API void lua_getuservalue (lua_State *L, int idx) { in lua_getuservalue() argument
716 lua_lock(L); in lua_getuservalue()
717 o = index2addr(L, idx); in lua_getuservalue()
718 api_check(L, ttisuserdata(o), "userdata expected"); in lua_getuservalue()
720 sethvalue(L, L->top, uvalue(o)->env); in lua_getuservalue()
722 setnilvalue(L->top); in lua_getuservalue()
723 api_incr_top(L); in lua_getuservalue()
724 lua_unlock(L); in lua_getuservalue()
733 LUA_API void lua_setglobal (lua_State *L, const char *var) { in lua_setglobal() argument
734 Table *reg = hvalue(&G(L)->l_registry); in lua_setglobal()
736 lua_lock(L); in lua_setglobal()
737 api_checknelems(L, 1); in lua_setglobal()
739 setsvalue2s(L, L->top++, luaS_new(L, var)); in lua_setglobal()
740 luaV_settable(L, gt, L->top - 1, L->top - 2); in lua_setglobal()
741 L->top -= 2; /* pop value and key */ in lua_setglobal()
742 lua_unlock(L); in lua_setglobal()
746 LUA_API void lua_settable (lua_State *L, int idx) { in lua_settable() argument
748 lua_lock(L); in lua_settable()
749 api_checknelems(L, 2); in lua_settable()
750 t = index2addr(L, idx); in lua_settable()
751 luaV_settable(L, t, L->top - 2, L->top - 1); in lua_settable()
752 L->top -= 2; /* pop index and value */ in lua_settable()
753 lua_unlock(L); in lua_settable()
757 LUA_API void lua_setfield (lua_State *L, int idx, const char *k) { in lua_setfield() argument
759 lua_lock(L); in lua_setfield()
760 api_checknelems(L, 1); in lua_setfield()
761 t = index2addr(L, idx); in lua_setfield()
762 setsvalue2s(L, L->top++, luaS_new(L, k)); in lua_setfield()
763 luaV_settable(L, t, L->top - 1, L->top - 2); in lua_setfield()
764 L->top -= 2; /* pop value and key */ in lua_setfield()
765 lua_unlock(L); in lua_setfield()
769 LUA_API void lua_rawset (lua_State *L, int idx) { in lua_rawset() argument
771 lua_lock(L); in lua_rawset()
772 api_checknelems(L, 2); in lua_rawset()
773 t = index2addr(L, idx); in lua_rawset()
774 api_check(L, ttistable(t), "table expected"); in lua_rawset()
775 setobj2t(L, luaH_set(L, hvalue(t), L->top-2), L->top-1); in lua_rawset()
777 luaC_barrierback(L, gcvalue(t), L->top-1); in lua_rawset()
778 L->top -= 2; in lua_rawset()
779 lua_unlock(L); in lua_rawset()
783 LUA_API void lua_rawseti (lua_State *L, int idx, int n) { in lua_rawseti() argument
785 lua_lock(L); in lua_rawseti()
786 api_checknelems(L, 1); in lua_rawseti()
787 t = index2addr(L, idx); in lua_rawseti()
788 api_check(L, ttistable(t), "table expected"); in lua_rawseti()
789 luaH_setint(L, hvalue(t), n, L->top - 1); in lua_rawseti()
790 luaC_barrierback(L, gcvalue(t), L->top-1); in lua_rawseti()
791 L->top--; in lua_rawseti()
792 lua_unlock(L); in lua_rawseti()
796 LUA_API void lua_rawsetp (lua_State *L, int idx, const void *p) { in lua_rawsetp() argument
799 lua_lock(L); in lua_rawsetp()
800 api_checknelems(L, 1); in lua_rawsetp()
801 t = index2addr(L, idx); in lua_rawsetp()
802 api_check(L, ttistable(t), "table expected"); in lua_rawsetp()
804 setobj2t(L, luaH_set(L, hvalue(t), &k), L->top - 1); in lua_rawsetp()
805 luaC_barrierback(L, gcvalue(t), L->top - 1); in lua_rawsetp()
806 L->top--; in lua_rawsetp()
807 lua_unlock(L); in lua_rawsetp()
811 LUA_API int lua_setmetatable (lua_State *L, int objindex) { in lua_setmetatable() argument
814 lua_lock(L); in lua_setmetatable()
815 api_checknelems(L, 1); in lua_setmetatable()
816 obj = index2addr(L, objindex); in lua_setmetatable()
817 if (ttisnil(L->top - 1)) in lua_setmetatable()
820 api_check(L, ttistable(L->top - 1), "table expected"); in lua_setmetatable()
821 mt = hvalue(L->top - 1); in lua_setmetatable()
827 luaC_objbarrierback(L, gcvalue(obj), mt); in lua_setmetatable()
828 luaC_checkfinalizer(L, gcvalue(obj), mt); in lua_setmetatable()
835 luaC_objbarrier(L, rawuvalue(obj), mt); in lua_setmetatable()
836 luaC_checkfinalizer(L, gcvalue(obj), mt); in lua_setmetatable()
841 G(L)->mt[ttypenv(obj)] = mt; in lua_setmetatable()
845 L->top--; in lua_setmetatable()
846 lua_unlock(L); in lua_setmetatable()
851 LUA_API void lua_setuservalue (lua_State *L, int idx) { in lua_setuservalue() argument
853 lua_lock(L); in lua_setuservalue()
854 api_checknelems(L, 1); in lua_setuservalue()
855 o = index2addr(L, idx); in lua_setuservalue()
856 api_check(L, ttisuserdata(o), "userdata expected"); in lua_setuservalue()
857 if (ttisnil(L->top - 1)) in lua_setuservalue()
860 api_check(L, ttistable(L->top - 1), "table expected"); in lua_setuservalue()
861 uvalue(o)->env = hvalue(L->top - 1); in lua_setuservalue()
862 luaC_objbarrier(L, gcvalue(o), hvalue(L->top - 1)); in lua_setuservalue()
864 L->top--; in lua_setuservalue()
865 lua_unlock(L); in lua_setuservalue()
874 #define checkresults(L,na,nr) \ argument
875 api_check(L, (nr) == LUA_MULTRET || (L->ci->top - L->top >= (nr) - (na)), \
879 LUA_API int lua_getctx (lua_State *L, int *ctx) { in lua_getctx() argument
880 if (L->ci->callstatus & CIST_YIELDED) { in lua_getctx()
881 if (ctx) *ctx = L->ci->u.c.ctx; in lua_getctx()
882 return L->ci->u.c.status; in lua_getctx()
888 LUA_API void lua_callk (lua_State *L, int nargs, int nresults, int ctx, in lua_callk() argument
891 lua_lock(L); in lua_callk()
892 api_check(L, k == NULL || !isLua(L->ci), in lua_callk()
894 api_checknelems(L, nargs+1); in lua_callk()
895 api_check(L, L->status == LUA_OK, "cannot do calls on non-normal thread"); in lua_callk()
896 checkresults(L, nargs, nresults); in lua_callk()
897 func = L->top - (nargs+1); in lua_callk()
898 if (k != NULL && L->nny == 0) { /* need to prepare continuation? */ in lua_callk()
899 L->ci->u.c.k = k; /* save continuation */ in lua_callk()
900 L->ci->u.c.ctx = ctx; /* save context */ in lua_callk()
901 luaD_call(L, func, nresults, 1); /* do the call */ in lua_callk()
904 luaD_call(L, func, nresults, 0); /* just do the call */ in lua_callk()
905 adjustresults(L, nresults); in lua_callk()
906 lua_unlock(L); in lua_callk()
920 static void f_call (lua_State *L, void *ud) { in f_call() argument
922 luaD_call(L, c->func, c->nresults, 0); in f_call()
927 LUA_API int lua_pcallk (lua_State *L, int nargs, int nresults, int errfunc, in lua_pcallk() argument
932 lua_lock(L); in lua_pcallk()
933 api_check(L, k == NULL || !isLua(L->ci), in lua_pcallk()
935 api_checknelems(L, nargs+1); in lua_pcallk()
936 api_check(L, L->status == LUA_OK, "cannot do calls on non-normal thread"); in lua_pcallk()
937 checkresults(L, nargs, nresults); in lua_pcallk()
941 StkId o = index2addr(L, errfunc); in lua_pcallk()
942 api_checkstackindex(L, errfunc, o); in lua_pcallk()
943 func = savestack(L, o); in lua_pcallk()
945 c.func = L->top - (nargs+1); /* function to be called */ in lua_pcallk()
946 if (k == NULL || L->nny > 0) { /* no continuation or no yieldable? */ in lua_pcallk()
948 status = luaD_pcall(L, f_call, &c, savestack(L, c.func), func); in lua_pcallk()
951 CallInfo *ci = L->ci; in lua_pcallk()
955 ci->extra = savestack(L, c.func); in lua_pcallk()
956 ci->u.c.old_allowhook = L->allowhook; in lua_pcallk()
957 ci->u.c.old_errfunc = L->errfunc; in lua_pcallk()
958 L->errfunc = func; in lua_pcallk()
961 luaD_call(L, c.func, nresults, 1); /* do the call */ in lua_pcallk()
963 L->errfunc = ci->u.c.old_errfunc; in lua_pcallk()
966 adjustresults(L, nresults); in lua_pcallk()
967 lua_unlock(L); in lua_pcallk()
972 LUA_API int lua_load (lua_State *L, lua_Reader reader, void *data, in lua_load() argument
976 lua_lock(L); in lua_load()
978 luaZ_init(L, &z, reader, data); in lua_load()
979 status = luaD_protectedparser(L, &z, chunkname, mode); in lua_load()
981 LClosure *f = clLvalue(L->top - 1); /* get newly created function */ in lua_load()
984 Table *reg = hvalue(&G(L)->l_registry); in lua_load()
987 setobj(L, f->upvals[0]->v, gt); in lua_load()
988 luaC_barrier(L, f->upvals[0], gt); in lua_load()
991 lua_unlock(L); in lua_load()
996 LUA_API int lua_dump (lua_State *L, lua_Writer writer, void *data) { in lua_dump() argument
999 lua_lock(L); in lua_dump()
1000 api_checknelems(L, 1); in lua_dump()
1001 o = L->top - 1; in lua_dump()
1003 status = luaU_dump(L, getproto(o), writer, data, 0); in lua_dump()
1006 lua_unlock(L); in lua_dump()
1011 LUA_API int lua_status (lua_State *L) { in lua_status() argument
1012 return L->status; in lua_status()
1020 LUA_API int lua_gc (lua_State *L, int what, int data) { in lua_gc() argument
1023 lua_lock(L); in lua_gc()
1024 g = G(L); in lua_gc()
1036 luaC_fullgc(L, 0); in lua_gc()
1051 luaC_forcestep(L); /* do a single step */ in lua_gc()
1058 luaC_forcestep(L); in lua_gc()
1084 luaC_changemode(L, KGC_GEN); in lua_gc()
1088 luaC_changemode(L, KGC_NORMAL); in lua_gc()
1093 lua_unlock(L); in lua_gc()
1104 LUA_API int lua_error (lua_State *L) { in lua_error() argument
1105 lua_lock(L); in lua_error()
1106 api_checknelems(L, 1); in lua_error()
1107 luaG_errormsg(L); in lua_error()
1113 LUA_API int lua_next (lua_State *L, int idx) { in lua_next() argument
1116 lua_lock(L); in lua_next()
1117 t = index2addr(L, idx); in lua_next()
1118 api_check(L, ttistable(t), "table expected"); in lua_next()
1119 more = luaH_next(L, hvalue(t), L->top - 1); in lua_next()
1121 api_incr_top(L); in lua_next()
1124 L->top -= 1; /* remove key */ in lua_next()
1125 lua_unlock(L); in lua_next()
1130 LUA_API void lua_concat (lua_State *L, int n) { in lua_concat() argument
1131 lua_lock(L); in lua_concat()
1132 api_checknelems(L, n); in lua_concat()
1134 luaC_checkGC(L); in lua_concat()
1135 luaV_concat(L, n); in lua_concat()
1138 setsvalue2s(L, L->top, luaS_newlstr(L, "", 0)); in lua_concat()
1139 api_incr_top(L); in lua_concat()
1142 lua_unlock(L); in lua_concat()
1146 LUA_API void lua_len (lua_State *L, int idx) { in lua_len() argument
1148 lua_lock(L); in lua_len()
1149 t = index2addr(L, idx); in lua_len()
1150 luaV_objlen(L, L->top, t); in lua_len()
1151 api_incr_top(L); in lua_len()
1152 lua_unlock(L); in lua_len()
1156 LUA_API lua_Alloc lua_getallocf (lua_State *L, void **ud) { in lua_getallocf() argument
1158 lua_lock(L); in lua_getallocf()
1159 if (ud) *ud = G(L)->ud; in lua_getallocf()
1160 f = G(L)->frealloc; in lua_getallocf()
1161 lua_unlock(L); in lua_getallocf()
1166 LUA_API void lua_setallocf (lua_State *L, lua_Alloc f, void *ud) { in lua_setallocf() argument
1167 lua_lock(L); in lua_setallocf()
1168 G(L)->ud = ud; in lua_setallocf()
1169 G(L)->frealloc = f; in lua_setallocf()
1170 lua_unlock(L); in lua_setallocf()
1174 LUA_API void *lua_newuserdata (lua_State *L, size_t size) { in lua_newuserdata() argument
1176 lua_lock(L); in lua_newuserdata()
1177 luaC_checkGC(L); in lua_newuserdata()
1178 u = luaS_newudata(L, size, NULL); in lua_newuserdata()
1179 setuvalue(L, L->top, u); in lua_newuserdata()
1180 api_incr_top(L); in lua_newuserdata()
1181 lua_unlock(L); in lua_newuserdata()
1212 LUA_API const char *lua_getupvalue (lua_State *L, int funcindex, int n) { in lua_getupvalue() argument
1215 lua_lock(L); in lua_getupvalue()
1216 name = aux_upvalue(index2addr(L, funcindex), n, &val, NULL); in lua_getupvalue()
1218 setobj2s(L, L->top, val); in lua_getupvalue()
1219 api_incr_top(L); in lua_getupvalue()
1221 lua_unlock(L); in lua_getupvalue()
1226 LUA_API const char *lua_setupvalue (lua_State *L, int funcindex, int n) { in lua_setupvalue() argument
1231 lua_lock(L); in lua_setupvalue()
1232 fi = index2addr(L, funcindex); in lua_setupvalue()
1233 api_checknelems(L, 1); in lua_setupvalue()
1236 L->top--; in lua_setupvalue()
1237 setobj(L, val, L->top); in lua_setupvalue()
1238 luaC_barrier(L, owner, L->top); in lua_setupvalue()
1240 lua_unlock(L); in lua_setupvalue()
1245 static UpVal **getupvalref (lua_State *L, int fidx, int n, LClosure **pf) { in getupvalref() argument
1247 StkId fi = index2addr(L, fidx); in getupvalref()
1248 api_check(L, ttisLclosure(fi), "Lua function expected"); in getupvalref()
1250 api_check(L, (1 <= n && n <= f->p->sizeupvalues), "invalid upvalue index"); in getupvalref()
1256 LUA_API void *lua_upvalueid (lua_State *L, int fidx, int n) { in lua_upvalueid() argument
1257 StkId fi = index2addr(L, fidx); in lua_upvalueid()
1260 return *getupvalref(L, fidx, n, NULL); in lua_upvalueid()
1264 api_check(L, 1 <= n && n <= f->nupvalues, "invalid upvalue index"); in lua_upvalueid()
1268 api_check(L, 0, "closure expected"); in lua_upvalueid()
1275 LUA_API void lua_upvaluejoin (lua_State *L, int fidx1, int n1, in lua_upvaluejoin() argument
1278 UpVal **up1 = getupvalref(L, fidx1, n1, &f1); in lua_upvaluejoin()
1279 UpVal **up2 = getupvalref(L, fidx2, n2, NULL); in lua_upvaluejoin()
1281 luaC_objbarrier(L, f1, *up2); in lua_upvaluejoin()