Lines Matching +full:- +full:l
33 /* value at a non-valid index */
45 #define api_checkvalidindex(L, o) api_check(L, isvalid(o), "invalid index") argument
47 #define api_checkstackindex(L, i, o) \ argument
48 api_check(L, isstackindex(i, o), "index not in the stack")
51 static TValue *index2addr (lua_State *L, int idx) { in index2addr() argument
52 CallInfo *ci = L->ci; in index2addr()
54 TValue *o = ci->func + idx; in index2addr()
55 api_check(L, idx <= ci->top - (ci->func + 1), "unacceptable index"); in index2addr()
56 if (o >= L->top) return NONVALIDVALUE; in index2addr()
60 api_check(L, idx != 0 && -idx <= L->top - (ci->func + 1), "invalid index"); in index2addr()
61 return L->top + idx; in index2addr()
64 return &G(L)->l_registry; in index2addr()
66 idx = LUA_REGISTRYINDEX - idx; in index2addr()
67 api_check(L, idx <= MAXUPVAL + 1, "upvalue index too large"); in index2addr()
68 if (ttislcf(ci->func)) /* light C function? */ in index2addr()
71 CClosure *func = clCvalue(ci->func); in index2addr()
72 return (idx <= func->nupvalues) ? &func->upvalue[idx-1] : NONVALIDVALUE; in index2addr()
82 static void growstack (lua_State *L, void *ud) { in growstack() argument
84 luaD_growstack(L, size); in growstack()
88 LUA_API int lua_checkstack (lua_State *L, int size) { in lua_checkstack() argument
90 CallInfo *ci = L->ci; in lua_checkstack()
91 lua_lock(L); in lua_checkstack()
92 if (L->stack_last - L->top > size) /* stack large enough? */ in lua_checkstack()
95 int inuse = cast_int(L->top - L->stack) + EXTRA_STACK; in lua_checkstack()
96 if (inuse > LUAI_MAXSTACK - size) /* can grow without overflow? */ in lua_checkstack()
99 res = (luaD_rawrunprotected(L, &growstack, &size) == LUA_OK); in lua_checkstack()
101 if (res && ci->top < L->top + size) in lua_checkstack()
102 ci->top = L->top + size; /* adjust frame top */ in lua_checkstack()
103 lua_unlock(L); in lua_checkstack()
114 api_check(from, to->ci->top - to->top >= n, "not enough elements to move"); in lua_xmove()
115 from->top -= n; in lua_xmove()
117 setobj2s(to, to->top++, from->top + i); in lua_xmove()
123 LUA_API lua_CFunction lua_atpanic (lua_State *L, lua_CFunction panicf) { in lua_atpanic() argument
125 lua_lock(L); in lua_atpanic()
126 old = G(L)->panic; in lua_atpanic()
127 G(L)->panic = panicf; in lua_atpanic()
128 lua_unlock(L); in lua_atpanic()
133 LUA_API const lua_Number *lua_version (lua_State *L) { in lua_version() argument
135 if (L == NULL) return &version; in lua_version()
136 else return G(L)->version; in lua_version()
149 LUA_API int lua_absindex (lua_State *L, int idx) { in lua_absindex() argument
152 : cast_int(L->top - L->ci->func + idx); in lua_absindex()
156 LUA_API int lua_gettop (lua_State *L) { in lua_gettop() argument
157 return cast_int(L->top - (L->ci->func + 1)); in lua_gettop()
161 LUA_API void lua_settop (lua_State *L, int idx) { in lua_settop() argument
162 StkId func = L->ci->func; in lua_settop()
163 lua_lock(L); in lua_settop()
165 api_check(L, idx <= L->stack_last - (func + 1), "new top too large"); in lua_settop()
166 while (L->top < (func + 1) + idx) in lua_settop()
167 setnilvalue(L->top++); in lua_settop()
168 L->top = (func + 1) + idx; in lua_settop()
171 api_check(L, -(idx+1) <= (L->top - (func + 1)), "invalid new top"); in lua_settop()
172 L->top += idx+1; /* `subtract' index (index is negative) */ in lua_settop()
174 lua_unlock(L); in lua_settop()
178 LUA_API void lua_remove (lua_State *L, int idx) { in lua_remove() argument
180 lua_lock(L); in lua_remove()
181 p = index2addr(L, idx); in lua_remove()
182 api_checkstackindex(L, idx, p); in lua_remove()
183 while (++p < L->top) setobjs2s(L, p-1, p); in lua_remove()
184 L->top--; in lua_remove()
185 lua_unlock(L); in lua_remove()
189 LUA_API void lua_insert (lua_State *L, int idx) { in lua_insert() argument
192 lua_lock(L); in lua_insert()
193 p = index2addr(L, idx); in lua_insert()
194 api_checkstackindex(L, idx, p); in lua_insert()
195 for (q = L->top; q > p; q--) /* use L->top as a temporary */ in lua_insert()
196 setobjs2s(L, q, q - 1); in lua_insert()
197 setobjs2s(L, p, L->top); in lua_insert()
198 lua_unlock(L); in lua_insert()
202 static void moveto (lua_State *L, TValue *fr, int idx) { in moveto() argument
203 TValue *to = index2addr(L, idx); in moveto()
204 api_checkvalidindex(L, to); in moveto()
205 setobj(L, to, fr); in moveto()
207 luaC_barrier(L, clCvalue(L->ci->func), fr); in moveto()
213 LUA_API void lua_replace (lua_State *L, int idx) { in lua_replace() argument
214 lua_lock(L); in lua_replace()
215 api_checknelems(L, 1); in lua_replace()
216 moveto(L, L->top - 1, idx); in lua_replace()
217 L->top--; in lua_replace()
218 lua_unlock(L); in lua_replace()
222 LUA_API void lua_copy (lua_State *L, int fromidx, int toidx) { in lua_copy() argument
224 lua_lock(L); in lua_copy()
225 fr = index2addr(L, fromidx); in lua_copy()
226 moveto(L, fr, toidx); in lua_copy()
227 lua_unlock(L); in lua_copy()
231 LUA_API void lua_pushvalue (lua_State *L, int idx) { in lua_pushvalue() argument
232 lua_lock(L); in lua_pushvalue()
233 setobj2s(L, L->top, index2addr(L, idx)); in lua_pushvalue()
234 api_incr_top(L); in lua_pushvalue()
235 lua_unlock(L); in lua_pushvalue()
241 ** access functions (stack -> C)
245 LUA_API int lua_type (lua_State *L, int idx) { in lua_type() argument
246 StkId o = index2addr(L, idx); in lua_type()
251 LUA_API const char *lua_typename (lua_State *L, int t) { in lua_typename() argument
252 UNUSED(L); in lua_typename()
259 LUA_API int lua_iscfunction (lua_State *L, int idx) { in lua_iscfunction() argument
260 StkId o = index2addr(L, idx); in lua_iscfunction()
265 LUA_API int lua_isnumber (lua_State *L, int idx) { in lua_isnumber() argument
267 const TValue *o = index2addr(L, idx); in lua_isnumber()
272 LUA_API int lua_isstring (lua_State *L, int idx) { in lua_isstring() argument
273 int t = lua_type(L, idx); in lua_isstring()
278 LUA_API int lua_isuserdata (lua_State *L, int idx) { in lua_isuserdata() argument
279 const TValue *o = index2addr(L, idx); in lua_isuserdata()
284 LUA_API int lua_rawequal (lua_State *L, int index1, int index2) { in lua_rawequal() argument
285 StkId o1 = index2addr(L, index1); in lua_rawequal()
286 StkId o2 = index2addr(L, index2); in lua_rawequal()
291 LUA_API void lua_arith (lua_State *L, int op) { in lua_arith() argument
294 lua_lock(L); in lua_arith()
296 api_checknelems(L, 2); in lua_arith()
298 api_checknelems(L, 1); in lua_arith()
299 setobjs2s(L, L->top, L->top - 1); in lua_arith()
300 L->top++; in lua_arith()
302 o1 = L->top - 2; in lua_arith()
303 o2 = L->top - 1; in lua_arith()
308 luaV_arith(L, o1, o1, o2, cast(TMS, op - LUA_OPADD + TM_ADD)); in lua_arith()
309 L->top--; in lua_arith()
310 lua_unlock(L); in lua_arith()
314 LUA_API int lua_compare (lua_State *L, int index1, int index2, int op) { in lua_compare() argument
317 lua_lock(L); /* may call tag method */ in lua_compare()
318 o1 = index2addr(L, index1); in lua_compare()
319 o2 = index2addr(L, index2); in lua_compare()
322 case LUA_OPEQ: i = equalobj(L, o1, o2); break; in lua_compare()
323 case LUA_OPLT: i = luaV_lessthan(L, o1, o2); break; in lua_compare()
324 case LUA_OPLE: i = luaV_lessequal(L, o1, o2); break; in lua_compare()
325 default: api_check(L, 0, "invalid option"); in lua_compare()
328 lua_unlock(L); in lua_compare()
333 LUA_API lua_Number lua_tonumberx (lua_State *L, int idx, int *isnum) { in lua_tonumberx() argument
335 const TValue *o = index2addr(L, idx); in lua_tonumberx()
347 LUA_API lua_Integer lua_tointegerx (lua_State *L, int idx, int *isnum) { in lua_tointegerx() argument
349 const TValue *o = index2addr(L, idx); in lua_tointegerx()
364 LUA_API lua_Unsigned lua_tounsignedx (lua_State *L, int idx, int *isnum) { in lua_tounsignedx() argument
366 const TValue *o = index2addr(L, idx); in lua_tounsignedx()
381 LUA_API int lua_toboolean (lua_State *L, int idx) { in lua_toboolean() argument
382 const TValue *o = index2addr(L, idx); in lua_toboolean()
387 LUA_API const char *lua_tolstring (lua_State *L, int idx, size_t *len) { in lua_tolstring() argument
388 StkId o = index2addr(L, idx); in lua_tolstring()
390 lua_lock(L); /* `luaV_tostring' may create a new string */ in lua_tolstring()
391 if (!luaV_tostring(L, o)) { /* conversion failed? */ in lua_tolstring()
393 lua_unlock(L); in lua_tolstring()
396 luaC_checkGC(L); in lua_tolstring()
397 o = index2addr(L, idx); /* previous call may reallocate the stack */ in lua_tolstring()
398 lua_unlock(L); in lua_tolstring()
400 if (len != NULL) *len = tsvalue(o)->len; in lua_tolstring()
405 LUA_API size_t lua_rawlen (lua_State *L, int idx) { in lua_rawlen() argument
406 StkId o = index2addr(L, idx); in lua_rawlen()
408 case LUA_TSTRING: return tsvalue(o)->len; in lua_rawlen()
409 case LUA_TUSERDATA: return uvalue(o)->len; in lua_rawlen()
416 LUA_API lua_CFunction lua_tocfunction (lua_State *L, int idx) { in lua_tocfunction() argument
417 StkId o = index2addr(L, idx); in lua_tocfunction()
420 return clCvalue(o)->f; in lua_tocfunction()
425 LUA_API void *lua_touserdata (lua_State *L, int idx) { in lua_touserdata() argument
426 StkId o = index2addr(L, idx); in lua_touserdata()
435 LUA_API lua_State *lua_tothread (lua_State *L, int idx) { in lua_tothread() argument
436 StkId o = index2addr(L, idx); in lua_tothread()
441 LUA_API const void *lua_topointer (lua_State *L, int idx) { in lua_topointer() argument
442 StkId o = index2addr(L, idx); in lua_topointer()
451 return lua_touserdata(L, idx); in lua_topointer()
459 ** push functions (C -> stack)
463 LUA_API void lua_pushnil (lua_State *L) { in lua_pushnil() argument
464 lua_lock(L); in lua_pushnil()
465 setnilvalue(L->top); in lua_pushnil()
466 api_incr_top(L); in lua_pushnil()
467 lua_unlock(L); in lua_pushnil()
471 LUA_API void lua_pushnumber (lua_State *L, lua_Number n) { in lua_pushnumber() argument
472 lua_lock(L); in lua_pushnumber()
473 setnvalue(L->top, n); in lua_pushnumber()
474 luai_checknum(L, L->top, in lua_pushnumber()
475 luaG_runerror(L, "C API - attempt to push a signaling NaN")); in lua_pushnumber()
476 api_incr_top(L); in lua_pushnumber()
477 lua_unlock(L); in lua_pushnumber()
481 LUA_API void lua_pushinteger (lua_State *L, lua_Integer n) { in lua_pushinteger() argument
482 lua_lock(L); in lua_pushinteger()
483 setnvalue(L->top, cast_num(n)); in lua_pushinteger()
484 api_incr_top(L); in lua_pushinteger()
485 lua_unlock(L); in lua_pushinteger()
489 LUA_API void lua_pushunsigned (lua_State *L, lua_Unsigned u) { in lua_pushunsigned() argument
491 lua_lock(L); in lua_pushunsigned()
493 setnvalue(L->top, n); in lua_pushunsigned()
494 api_incr_top(L); in lua_pushunsigned()
495 lua_unlock(L); in lua_pushunsigned()
499 LUA_API const char *lua_pushlstring (lua_State *L, const char *s, size_t len) { in lua_pushlstring() argument
501 lua_lock(L); in lua_pushlstring()
502 luaC_checkGC(L); in lua_pushlstring()
503 ts = luaS_newlstr(L, s, len); in lua_pushlstring()
504 setsvalue2s(L, L->top, ts); in lua_pushlstring()
505 api_incr_top(L); in lua_pushlstring()
506 lua_unlock(L); in lua_pushlstring()
511 LUA_API const char *lua_pushstring (lua_State *L, const char *s) { in lua_pushstring() argument
513 lua_pushnil(L); in lua_pushstring()
518 lua_lock(L); in lua_pushstring()
519 luaC_checkGC(L); in lua_pushstring()
520 ts = luaS_new(L, s); in lua_pushstring()
521 setsvalue2s(L, L->top, ts); in lua_pushstring()
522 api_incr_top(L); in lua_pushstring()
523 lua_unlock(L); in lua_pushstring()
529 LUA_API const char *lua_pushvfstring (lua_State *L, const char *fmt, in lua_pushvfstring() argument
532 lua_lock(L); in lua_pushvfstring()
533 luaC_checkGC(L); in lua_pushvfstring()
534 ret = luaO_pushvfstring(L, fmt, argp); in lua_pushvfstring()
535 lua_unlock(L); in lua_pushvfstring()
540 LUA_API const char *lua_pushfstring (lua_State *L, const char *fmt, ...) { in lua_pushfstring() argument
543 lua_lock(L); in lua_pushfstring()
544 luaC_checkGC(L); in lua_pushfstring()
546 ret = luaO_pushvfstring(L, fmt, argp); in lua_pushfstring()
548 lua_unlock(L); in lua_pushfstring()
553 LUA_API void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n) { in lua_pushcclosure() argument
554 lua_lock(L); in lua_pushcclosure()
556 setfvalue(L->top, fn); in lua_pushcclosure()
560 api_checknelems(L, n); in lua_pushcclosure()
561 api_check(L, n <= MAXUPVAL, "upvalue index too large"); in lua_pushcclosure()
562 luaC_checkGC(L); in lua_pushcclosure()
563 cl = luaF_newCclosure(L, n); in lua_pushcclosure()
564 cl->c.f = fn; in lua_pushcclosure()
565 L->top -= n; in lua_pushcclosure()
566 while (n--) in lua_pushcclosure()
567 setobj2n(L, &cl->c.upvalue[n], L->top + n); in lua_pushcclosure()
568 setclCvalue(L, L->top, cl); in lua_pushcclosure()
570 api_incr_top(L); in lua_pushcclosure()
571 lua_unlock(L); in lua_pushcclosure()
575 LUA_API void lua_pushboolean (lua_State *L, int b) { in lua_pushboolean() argument
576 lua_lock(L); in lua_pushboolean()
577 setbvalue(L->top, (b != 0)); /* ensure that true is 1 */ in lua_pushboolean()
578 api_incr_top(L); in lua_pushboolean()
579 lua_unlock(L); in lua_pushboolean()
583 LUA_API void lua_pushlightuserdata (lua_State *L, void *p) { in lua_pushlightuserdata() argument
584 lua_lock(L); in lua_pushlightuserdata()
585 setpvalue(L->top, p); in lua_pushlightuserdata()
586 api_incr_top(L); in lua_pushlightuserdata()
587 lua_unlock(L); in lua_pushlightuserdata()
591 LUA_API int lua_pushthread (lua_State *L) { in lua_pushthread() argument
592 lua_lock(L); in lua_pushthread()
593 setthvalue(L, L->top, L); in lua_pushthread()
594 api_incr_top(L); in lua_pushthread()
595 lua_unlock(L); in lua_pushthread()
596 return (G(L)->mainthread == L); in lua_pushthread()
602 ** get functions (Lua -> stack)
606 LUA_API void lua_getglobal (lua_State *L, const char *var) { in lua_getglobal() argument
607 Table *reg = hvalue(&G(L)->l_registry); in lua_getglobal()
609 lua_lock(L); in lua_getglobal()
611 setsvalue2s(L, L->top++, luaS_new(L, var)); in lua_getglobal()
612 luaV_gettable(L, gt, L->top - 1, L->top - 1); in lua_getglobal()
613 lua_unlock(L); in lua_getglobal()
617 LUA_API void lua_gettable (lua_State *L, int idx) { in lua_gettable() argument
619 lua_lock(L); in lua_gettable()
620 t = index2addr(L, idx); in lua_gettable()
621 luaV_gettable(L, t, L->top - 1, L->top - 1); in lua_gettable()
622 lua_unlock(L); in lua_gettable()
626 LUA_API void lua_getfield (lua_State *L, int idx, const char *k) { in lua_getfield() argument
628 lua_lock(L); in lua_getfield()
629 t = index2addr(L, idx); in lua_getfield()
630 setsvalue2s(L, L->top, luaS_new(L, k)); in lua_getfield()
631 api_incr_top(L); in lua_getfield()
632 luaV_gettable(L, t, L->top - 1, L->top - 1); in lua_getfield()
633 lua_unlock(L); in lua_getfield()
637 LUA_API void lua_rawget (lua_State *L, int idx) { in lua_rawget() argument
639 lua_lock(L); in lua_rawget()
640 t = index2addr(L, idx); in lua_rawget()
641 api_check(L, ttistable(t), "table expected"); in lua_rawget()
642 setobj2s(L, L->top - 1, luaH_get(hvalue(t), L->top - 1)); in lua_rawget()
643 lua_unlock(L); in lua_rawget()
647 LUA_API void lua_rawgeti (lua_State *L, int idx, int n) { in lua_rawgeti() argument
649 lua_lock(L); in lua_rawgeti()
650 t = index2addr(L, idx); in lua_rawgeti()
651 api_check(L, ttistable(t), "table expected"); in lua_rawgeti()
652 setobj2s(L, L->top, luaH_getint(hvalue(t), n)); in lua_rawgeti()
653 api_incr_top(L); in lua_rawgeti()
654 lua_unlock(L); in lua_rawgeti()
658 LUA_API void lua_rawgetp (lua_State *L, int idx, const void *p) { in lua_rawgetp() argument
661 lua_lock(L); in lua_rawgetp()
662 t = index2addr(L, idx); in lua_rawgetp()
663 api_check(L, ttistable(t), "table expected"); in lua_rawgetp()
665 setobj2s(L, L->top, luaH_get(hvalue(t), &k)); in lua_rawgetp()
666 api_incr_top(L); in lua_rawgetp()
667 lua_unlock(L); in lua_rawgetp()
671 LUA_API void lua_createtable (lua_State *L, int narray, int nrec) { in lua_createtable() argument
673 lua_lock(L); in lua_createtable()
674 luaC_checkGC(L); in lua_createtable()
675 t = luaH_new(L); in lua_createtable()
676 sethvalue(L, L->top, t); in lua_createtable()
677 api_incr_top(L); in lua_createtable()
679 luaH_resize(L, t, narray, nrec); in lua_createtable()
680 lua_unlock(L); in lua_createtable()
684 LUA_API int lua_getmetatable (lua_State *L, int objindex) { in lua_getmetatable() argument
688 lua_lock(L); in lua_getmetatable()
689 obj = index2addr(L, objindex); in lua_getmetatable()
692 mt = hvalue(obj)->metatable; in lua_getmetatable()
695 mt = uvalue(obj)->metatable; in lua_getmetatable()
698 mt = G(L)->mt[ttypenv(obj)]; in lua_getmetatable()
704 sethvalue(L, L->top, mt); in lua_getmetatable()
705 api_incr_top(L); in lua_getmetatable()
708 lua_unlock(L); in lua_getmetatable()
713 LUA_API void lua_getuservalue (lua_State *L, int idx) { in lua_getuservalue() argument
715 lua_lock(L); in lua_getuservalue()
716 o = index2addr(L, idx); in lua_getuservalue()
717 api_check(L, ttisuserdata(o), "userdata expected"); in lua_getuservalue()
718 if (uvalue(o)->env) { in lua_getuservalue()
719 sethvalue(L, L->top, uvalue(o)->env); in lua_getuservalue()
721 setnilvalue(L->top); in lua_getuservalue()
722 api_incr_top(L); in lua_getuservalue()
723 lua_unlock(L); in lua_getuservalue()
728 ** set functions (stack -> Lua)
732 LUA_API void lua_setglobal (lua_State *L, const char *var) { in lua_setglobal() argument
733 Table *reg = hvalue(&G(L)->l_registry); in lua_setglobal()
735 lua_lock(L); in lua_setglobal()
736 api_checknelems(L, 1); in lua_setglobal()
738 setsvalue2s(L, L->top++, luaS_new(L, var)); in lua_setglobal()
739 luaV_settable(L, gt, L->top - 1, L->top - 2); in lua_setglobal()
740 L->top -= 2; /* pop value and key */ in lua_setglobal()
741 lua_unlock(L); in lua_setglobal()
745 LUA_API void lua_settable (lua_State *L, int idx) { in lua_settable() argument
747 lua_lock(L); in lua_settable()
748 api_checknelems(L, 2); in lua_settable()
749 t = index2addr(L, idx); in lua_settable()
750 luaV_settable(L, t, L->top - 2, L->top - 1); in lua_settable()
751 L->top -= 2; /* pop index and value */ in lua_settable()
752 lua_unlock(L); in lua_settable()
756 LUA_API void lua_setfield (lua_State *L, int idx, const char *k) { in lua_setfield() argument
758 lua_lock(L); in lua_setfield()
759 api_checknelems(L, 1); in lua_setfield()
760 t = index2addr(L, idx); in lua_setfield()
761 setsvalue2s(L, L->top++, luaS_new(L, k)); in lua_setfield()
762 luaV_settable(L, t, L->top - 1, L->top - 2); in lua_setfield()
763 L->top -= 2; /* pop value and key */ in lua_setfield()
764 lua_unlock(L); in lua_setfield()
768 LUA_API void lua_rawset (lua_State *L, int idx) { in lua_rawset() argument
770 lua_lock(L); in lua_rawset()
771 api_checknelems(L, 2); in lua_rawset()
772 t = index2addr(L, idx); in lua_rawset()
773 api_check(L, ttistable(t), "table expected"); in lua_rawset()
774 setobj2t(L, luaH_set(L, hvalue(t), L->top-2), L->top-1); in lua_rawset()
776 luaC_barrierback(L, gcvalue(t), L->top-1); in lua_rawset()
777 L->top -= 2; in lua_rawset()
778 lua_unlock(L); in lua_rawset()
782 LUA_API void lua_rawseti (lua_State *L, int idx, int n) { in lua_rawseti() argument
784 lua_lock(L); in lua_rawseti()
785 api_checknelems(L, 1); in lua_rawseti()
786 t = index2addr(L, idx); in lua_rawseti()
787 api_check(L, ttistable(t), "table expected"); in lua_rawseti()
788 luaH_setint(L, hvalue(t), n, L->top - 1); in lua_rawseti()
789 luaC_barrierback(L, gcvalue(t), L->top-1); in lua_rawseti()
790 L->top--; in lua_rawseti()
791 lua_unlock(L); in lua_rawseti()
795 LUA_API void lua_rawsetp (lua_State *L, int idx, const void *p) { in lua_rawsetp() argument
798 lua_lock(L); in lua_rawsetp()
799 api_checknelems(L, 1); in lua_rawsetp()
800 t = index2addr(L, idx); in lua_rawsetp()
801 api_check(L, ttistable(t), "table expected"); in lua_rawsetp()
803 setobj2t(L, luaH_set(L, hvalue(t), &k), L->top - 1); in lua_rawsetp()
804 luaC_barrierback(L, gcvalue(t), L->top - 1); in lua_rawsetp()
805 L->top--; in lua_rawsetp()
806 lua_unlock(L); in lua_rawsetp()
810 LUA_API int lua_setmetatable (lua_State *L, int objindex) { in lua_setmetatable() argument
813 lua_lock(L); in lua_setmetatable()
814 api_checknelems(L, 1); in lua_setmetatable()
815 obj = index2addr(L, objindex); in lua_setmetatable()
816 if (ttisnil(L->top - 1)) in lua_setmetatable()
819 api_check(L, ttistable(L->top - 1), "table expected"); in lua_setmetatable()
820 mt = hvalue(L->top - 1); in lua_setmetatable()
824 hvalue(obj)->metatable = mt; in lua_setmetatable()
826 luaC_objbarrierback(L, gcvalue(obj), mt); in lua_setmetatable()
827 luaC_checkfinalizer(L, gcvalue(obj), mt); in lua_setmetatable()
832 uvalue(obj)->metatable = mt; in lua_setmetatable()
834 luaC_objbarrier(L, rawuvalue(obj), mt); in lua_setmetatable()
835 luaC_checkfinalizer(L, gcvalue(obj), mt); in lua_setmetatable()
840 G(L)->mt[ttypenv(obj)] = mt; in lua_setmetatable()
844 L->top--; in lua_setmetatable()
845 lua_unlock(L); in lua_setmetatable()
850 LUA_API void lua_setuservalue (lua_State *L, int idx) { in lua_setuservalue() argument
852 lua_lock(L); in lua_setuservalue()
853 api_checknelems(L, 1); in lua_setuservalue()
854 o = index2addr(L, idx); in lua_setuservalue()
855 api_check(L, ttisuserdata(o), "userdata expected"); in lua_setuservalue()
856 if (ttisnil(L->top - 1)) in lua_setuservalue()
857 uvalue(o)->env = NULL; in lua_setuservalue()
859 api_check(L, ttistable(L->top - 1), "table expected"); in lua_setuservalue()
860 uvalue(o)->env = hvalue(L->top - 1); in lua_setuservalue()
861 luaC_objbarrier(L, gcvalue(o), hvalue(L->top - 1)); in lua_setuservalue()
863 L->top--; in lua_setuservalue()
864 lua_unlock(L); in lua_setuservalue()
873 #define checkresults(L,na,nr) \ argument
874 api_check(L, (nr) == LUA_MULTRET || (L->ci->top - L->top >= (nr) - (na)), \
878 LUA_API int lua_getctx (lua_State *L, int *ctx) { in lua_getctx() argument
879 if (L->ci->callstatus & CIST_YIELDED) { in lua_getctx()
880 if (ctx) *ctx = L->ci->u.c.ctx; in lua_getctx()
881 return L->ci->u.c.status; in lua_getctx()
887 LUA_API void lua_callk (lua_State *L, int nargs, int nresults, int ctx, in lua_callk() argument
890 lua_lock(L); in lua_callk()
891 api_check(L, k == NULL || !isLua(L->ci), in lua_callk()
893 api_checknelems(L, nargs+1); in lua_callk()
894 api_check(L, L->status == LUA_OK, "cannot do calls on non-normal thread"); in lua_callk()
895 checkresults(L, nargs, nresults); in lua_callk()
896 func = L->top - (nargs+1); in lua_callk()
897 if (k != NULL && L->nny == 0) { /* need to prepare continuation? */ in lua_callk()
898 L->ci->u.c.k = k; /* save continuation */ in lua_callk()
899 L->ci->u.c.ctx = ctx; /* save context */ in lua_callk()
900 luaD_call(L, func, nresults, 1); /* do the call */ in lua_callk()
903 luaD_call(L, func, nresults, 0); /* just do the call */ in lua_callk()
904 adjustresults(L, nresults); in lua_callk()
905 lua_unlock(L); in lua_callk()
919 static void f_call (lua_State *L, void *ud) { in f_call() argument
921 luaD_call(L, c->func, c->nresults, 0); in f_call()
926 LUA_API int lua_pcallk (lua_State *L, int nargs, int nresults, int errfunc, in lua_pcallk() argument
931 lua_lock(L); in lua_pcallk()
932 api_check(L, k == NULL || !isLua(L->ci), in lua_pcallk()
934 api_checknelems(L, nargs+1); in lua_pcallk()
935 api_check(L, L->status == LUA_OK, "cannot do calls on non-normal thread"); in lua_pcallk()
936 checkresults(L, nargs, nresults); in lua_pcallk()
940 StkId o = index2addr(L, errfunc); in lua_pcallk()
941 api_checkstackindex(L, errfunc, o); in lua_pcallk()
942 func = savestack(L, o); in lua_pcallk()
944 c.func = L->top - (nargs+1); /* function to be called */ in lua_pcallk()
945 if (k == NULL || L->nny > 0) { /* no continuation or no yieldable? */ in lua_pcallk()
947 status = luaD_pcall(L, f_call, &c, savestack(L, c.func), func); in lua_pcallk()
950 CallInfo *ci = L->ci; in lua_pcallk()
951 ci->u.c.k = k; /* save continuation */ in lua_pcallk()
952 ci->u.c.ctx = ctx; /* save context */ in lua_pcallk()
954 ci->extra = savestack(L, c.func); in lua_pcallk()
955 ci->u.c.old_allowhook = L->allowhook; in lua_pcallk()
956 ci->u.c.old_errfunc = L->errfunc; in lua_pcallk()
957 L->errfunc = func; in lua_pcallk()
959 ci->callstatus |= CIST_YPCALL; in lua_pcallk()
960 luaD_call(L, c.func, nresults, 1); /* do the call */ in lua_pcallk()
961 ci->callstatus &= ~CIST_YPCALL; in lua_pcallk()
962 L->errfunc = ci->u.c.old_errfunc; in lua_pcallk()
965 adjustresults(L, nresults); in lua_pcallk()
966 lua_unlock(L); in lua_pcallk()
971 LUA_API int lua_load (lua_State *L, lua_Reader reader, void *data, in lua_load() argument
975 lua_lock(L); in lua_load()
977 luaZ_init(L, &z, reader, data); in lua_load()
978 status = luaD_protectedparser(L, &z, chunkname, mode); in lua_load()
980 LClosure *f = clLvalue(L->top - 1); /* get newly created function */ in lua_load()
981 if (f->nupvalues == 1) { /* does it have one upvalue? */ in lua_load()
983 Table *reg = hvalue(&G(L)->l_registry); in lua_load()
986 setobj(L, f->upvals[0]->v, gt); in lua_load()
987 luaC_barrier(L, f->upvals[0], gt); in lua_load()
990 lua_unlock(L); in lua_load()
995 LUA_API int lua_dump (lua_State *L, lua_Writer writer, void *data) { in lua_dump() argument
998 lua_lock(L); in lua_dump()
999 api_checknelems(L, 1); in lua_dump()
1000 o = L->top - 1; in lua_dump()
1002 status = luaU_dump(L, getproto(o), writer, data, 0); in lua_dump()
1005 lua_unlock(L); in lua_dump()
1010 LUA_API int lua_status (lua_State *L) { in lua_status() argument
1011 return L->status; in lua_status()
1016 ** Garbage-collection function
1019 LUA_API int lua_gc (lua_State *L, int what, int data) { in lua_gc() argument
1022 lua_lock(L); in lua_gc()
1023 g = G(L); in lua_gc()
1026 g->gcrunning = 0; in lua_gc()
1031 g->gcrunning = 1; in lua_gc()
1035 luaC_fullgc(L, 0); in lua_gc()
1048 if (g->gckind == KGC_GEN) { /* generational mode? */ in lua_gc()
1049 res = (g->GCestimate == 0); /* true if it will do major collection */ in lua_gc()
1050 luaC_forcestep(L); /* do a single step */ in lua_gc()
1053 lu_mem debt = cast(lu_mem, data) * 1024 - GCSTEPSIZE; in lua_gc()
1054 if (g->gcrunning) in lua_gc()
1055 debt += g->GCdebt; /* include current debt */ in lua_gc()
1057 luaC_forcestep(L); in lua_gc()
1058 if (g->gcstate == GCSpause) /* end of cycle? */ in lua_gc()
1064 res = g->gcpause; in lua_gc()
1065 g->gcpause = data; in lua_gc()
1069 res = g->gcmajorinc; in lua_gc()
1070 g->gcmajorinc = data; in lua_gc()
1074 res = g->gcstepmul; in lua_gc()
1075 g->gcstepmul = data; in lua_gc()
1079 res = g->gcrunning; in lua_gc()
1083 luaC_changemode(L, KGC_GEN); in lua_gc()
1087 luaC_changemode(L, KGC_NORMAL); in lua_gc()
1090 default: res = -1; /* invalid option */ in lua_gc()
1092 lua_unlock(L); in lua_gc()
1103 LUA_API int lua_error (lua_State *L) { in lua_error() argument
1104 lua_lock(L); in lua_error()
1105 api_checknelems(L, 1); in lua_error()
1106 luaG_errormsg(L); in lua_error()
1112 LUA_API int lua_next (lua_State *L, int idx) { in lua_next() argument
1115 lua_lock(L); in lua_next()
1116 t = index2addr(L, idx); in lua_next()
1117 api_check(L, ttistable(t), "table expected"); in lua_next()
1118 more = luaH_next(L, hvalue(t), L->top - 1); in lua_next()
1120 api_incr_top(L); in lua_next()
1123 L->top -= 1; /* remove key */ in lua_next()
1124 lua_unlock(L); in lua_next()
1129 LUA_API void lua_concat (lua_State *L, int n) { in lua_concat() argument
1130 lua_lock(L); in lua_concat()
1131 api_checknelems(L, n); in lua_concat()
1133 luaC_checkGC(L); in lua_concat()
1134 luaV_concat(L, n); in lua_concat()
1137 setsvalue2s(L, L->top, luaS_newlstr(L, "", 0)); in lua_concat()
1138 api_incr_top(L); in lua_concat()
1141 lua_unlock(L); in lua_concat()
1145 LUA_API void lua_len (lua_State *L, int idx) { in lua_len() argument
1147 lua_lock(L); in lua_len()
1148 t = index2addr(L, idx); in lua_len()
1149 luaV_objlen(L, L->top, t); in lua_len()
1150 api_incr_top(L); in lua_len()
1151 lua_unlock(L); in lua_len()
1155 LUA_API lua_Alloc lua_getallocf (lua_State *L, void **ud) { in lua_getallocf() argument
1157 lua_lock(L); in lua_getallocf()
1158 if (ud) *ud = G(L)->ud; in lua_getallocf()
1159 f = G(L)->frealloc; in lua_getallocf()
1160 lua_unlock(L); in lua_getallocf()
1165 LUA_API void lua_setallocf (lua_State *L, lua_Alloc f, void *ud) { in lua_setallocf() argument
1166 lua_lock(L); in lua_setallocf()
1167 G(L)->ud = ud; in lua_setallocf()
1168 G(L)->frealloc = f; in lua_setallocf()
1169 lua_unlock(L); in lua_setallocf()
1173 LUA_API void *lua_newuserdata (lua_State *L, size_t size) { in lua_newuserdata() argument
1175 lua_lock(L); in lua_newuserdata()
1176 luaC_checkGC(L); in lua_newuserdata()
1177 u = luaS_newudata(L, size, NULL); in lua_newuserdata()
1178 setuvalue(L, L->top, u); in lua_newuserdata()
1179 api_incr_top(L); in lua_newuserdata()
1180 lua_unlock(L); in lua_newuserdata()
1191 if (!(1 <= n && n <= f->nupvalues)) return NULL; in aux_upvalue()
1192 *val = &f->upvalue[n-1]; in aux_upvalue()
1199 Proto *p = f->p; in aux_upvalue()
1200 if (!(1 <= n && n <= p->sizeupvalues)) return NULL; in aux_upvalue()
1201 *val = f->upvals[n-1]->v; in aux_upvalue()
1202 if (owner) *owner = obj2gco(f->upvals[n - 1]); in aux_upvalue()
1203 name = p->upvalues[n-1].name; in aux_upvalue()
1211 LUA_API const char *lua_getupvalue (lua_State *L, int funcindex, int n) { in lua_getupvalue() argument
1214 lua_lock(L); in lua_getupvalue()
1215 name = aux_upvalue(index2addr(L, funcindex), n, &val, NULL); in lua_getupvalue()
1217 setobj2s(L, L->top, val); in lua_getupvalue()
1218 api_incr_top(L); in lua_getupvalue()
1220 lua_unlock(L); in lua_getupvalue()
1225 LUA_API const char *lua_setupvalue (lua_State *L, int funcindex, int n) { in lua_setupvalue() argument
1230 lua_lock(L); in lua_setupvalue()
1231 fi = index2addr(L, funcindex); in lua_setupvalue()
1232 api_checknelems(L, 1); in lua_setupvalue()
1235 L->top--; in lua_setupvalue()
1236 setobj(L, val, L->top); in lua_setupvalue()
1237 luaC_barrier(L, owner, L->top); in lua_setupvalue()
1239 lua_unlock(L); in lua_setupvalue()
1244 static UpVal **getupvalref (lua_State *L, int fidx, int n, LClosure **pf) { in getupvalref() argument
1246 StkId fi = index2addr(L, fidx); in getupvalref()
1247 api_check(L, ttisLclosure(fi), "Lua function expected"); in getupvalref()
1249 api_check(L, (1 <= n && n <= f->p->sizeupvalues), "invalid upvalue index"); in getupvalref()
1251 return &f->upvals[n - 1]; /* get its upvalue pointer */ in getupvalref()
1255 LUA_API void *lua_upvalueid (lua_State *L, int fidx, int n) { in lua_upvalueid() argument
1256 StkId fi = index2addr(L, fidx); in lua_upvalueid()
1259 return *getupvalref(L, fidx, n, NULL); in lua_upvalueid()
1263 api_check(L, 1 <= n && n <= f->nupvalues, "invalid upvalue index"); in lua_upvalueid()
1264 return &f->upvalue[n - 1]; in lua_upvalueid()
1267 api_check(L, 0, "closure expected"); in lua_upvalueid()
1274 LUA_API void lua_upvaluejoin (lua_State *L, int fidx1, int n1, in lua_upvaluejoin() argument
1277 UpVal **up1 = getupvalref(L, fidx1, n1, &f1); in lua_upvaluejoin()
1278 UpVal **up2 = getupvalref(L, fidx2, n2, NULL); in lua_upvaluejoin()
1280 luaC_objbarrier(L, f1, *up2); in lua_upvaluejoin()