Lines Matching refs:L

31 static int luaB_print (lua_State *L) {  in luaB_print()  argument
32 int n = lua_gettop(L); /* number of arguments */ in luaB_print()
34 lua_getglobal(L, "tostring"); in luaB_print()
37 lua_pushvalue(L, -1); /* function to be called */ in luaB_print()
38 lua_pushvalue(L, i); /* value to print */ in luaB_print()
39 lua_call(L, 1, 1); in luaB_print()
40 s = lua_tostring(L, -1); /* get result */ in luaB_print()
42 return luaL_error(L, LUA_QL("tostring") " must return a string to " in luaB_print()
46 lua_pop(L, 1); /* pop result */ in luaB_print()
53 static int luaB_tonumber (lua_State *L) { in luaB_tonumber() argument
54 int base = luaL_optint(L, 2, 10); in luaB_tonumber()
56 luaL_checkany(L, 1); in luaB_tonumber()
57 if (lua_isnumber(L, 1)) { in luaB_tonumber()
58 lua_pushnumber(L, lua_tonumber(L, 1)); in luaB_tonumber()
63 const char *s1 = luaL_checkstring(L, 1); in luaB_tonumber()
66 luaL_argcheck(L, 2 <= base && base <= 36, 2, "base out of range"); in luaB_tonumber()
71 lua_pushnumber(L, (lua_Number)n); in luaB_tonumber()
76 lua_pushnil(L); /* else not a number */ in luaB_tonumber()
81 static int luaB_error (lua_State *L) { in luaB_error() argument
82 int level = luaL_optint(L, 2, 1); in luaB_error()
83 lua_settop(L, 1); in luaB_error()
84 if (lua_isstring(L, 1) && level > 0) { /* add extra information? */ in luaB_error()
85 luaL_where(L, level); in luaB_error()
86 lua_pushvalue(L, 1); in luaB_error()
87 lua_concat(L, 2); in luaB_error()
89 return lua_error(L); in luaB_error()
93 static int luaB_getmetatable (lua_State *L) { in luaB_getmetatable() argument
94 luaL_checkany(L, 1); in luaB_getmetatable()
95 if (!lua_getmetatable(L, 1)) { in luaB_getmetatable()
96 lua_pushnil(L); in luaB_getmetatable()
99 luaL_getmetafield(L, 1, "__metatable"); in luaB_getmetatable()
104 static int luaB_setmetatable (lua_State *L) { in luaB_setmetatable() argument
105 int t = lua_type(L, 2); in luaB_setmetatable()
106 luaL_checktype(L, 1, LUA_TTABLE); in luaB_setmetatable()
107 luaL_argcheck(L, t == LUA_TNIL || t == LUA_TTABLE, 2, in luaB_setmetatable()
109 if (luaL_getmetafield(L, 1, "__metatable")) in luaB_setmetatable()
110 luaL_error(L, "cannot change a protected metatable"); in luaB_setmetatable()
111 lua_settop(L, 2); in luaB_setmetatable()
112 lua_setmetatable(L, 1); in luaB_setmetatable()
117 static void getfunc (lua_State *L, int opt) { in getfunc() argument
118 if (lua_isfunction(L, 1)) lua_pushvalue(L, 1); in getfunc()
121 int level = opt ? luaL_optint(L, 1, 1) : luaL_checkint(L, 1); in getfunc()
122 luaL_argcheck(L, level >= 0, 1, "level must be non-negative"); in getfunc()
123 if (lua_getstack(L, level, &ar) == 0) in getfunc()
124 luaL_argerror(L, 1, "invalid level"); in getfunc()
125 lua_getinfo(L, "f", &ar); in getfunc()
126 if (lua_isnil(L, -1)) in getfunc()
127 luaL_error(L, "no function environment for tail call at level %d", in getfunc()
133 static int luaB_getfenv (lua_State *L) { in luaB_getfenv() argument
134 getfunc(L, 1); in luaB_getfenv()
135 if (lua_iscfunction(L, -1)) /* is a C function? */ in luaB_getfenv()
136 lua_pushvalue(L, LUA_GLOBALSINDEX); /* return the thread's global env. */ in luaB_getfenv()
138 lua_getfenv(L, -1); in luaB_getfenv()
143 static int luaB_setfenv (lua_State *L) { in luaB_setfenv() argument
144 luaL_checktype(L, 2, LUA_TTABLE); in luaB_setfenv()
145 getfunc(L, 0); in luaB_setfenv()
146 lua_pushvalue(L, 2); in luaB_setfenv()
147 if (lua_isnumber(L, 1) && lua_tonumber(L, 1) == 0) { in luaB_setfenv()
149 lua_pushthread(L); in luaB_setfenv()
150 lua_insert(L, -2); in luaB_setfenv()
151 lua_setfenv(L, -2); in luaB_setfenv()
154 else if (lua_iscfunction(L, -2) || lua_setfenv(L, -2) == 0) in luaB_setfenv()
155 luaL_error(L, in luaB_setfenv()
161 static int luaB_rawequal (lua_State *L) { in luaB_rawequal() argument
162 luaL_checkany(L, 1); in luaB_rawequal()
163 luaL_checkany(L, 2); in luaB_rawequal()
164 lua_pushboolean(L, lua_rawequal(L, 1, 2)); in luaB_rawequal()
169 static int luaB_rawget (lua_State *L) { in luaB_rawget() argument
170 luaL_checktype(L, 1, LUA_TTABLE); in luaB_rawget()
171 luaL_checkany(L, 2); in luaB_rawget()
172 lua_settop(L, 2); in luaB_rawget()
173 lua_rawget(L, 1); in luaB_rawget()
177 static int luaB_rawset (lua_State *L) { in luaB_rawset() argument
178 luaL_checktype(L, 1, LUA_TTABLE); in luaB_rawset()
179 luaL_checkany(L, 2); in luaB_rawset()
180 luaL_checkany(L, 3); in luaB_rawset()
181 lua_settop(L, 3); in luaB_rawset()
182 lua_rawset(L, 1); in luaB_rawset()
187 static int luaB_gcinfo (lua_State *L) { in luaB_gcinfo() argument
188 lua_pushinteger(L, lua_getgccount(L)); in luaB_gcinfo()
193 static int luaB_collectgarbage (lua_State *L) { in luaB_collectgarbage() argument
198 int o = luaL_checkoption(L, 1, "collect", opts); in luaB_collectgarbage()
199 int ex = luaL_optint(L, 2, 0); in luaB_collectgarbage()
200 int res = lua_gc(L, optsnum[o], ex); in luaB_collectgarbage()
203 int b = lua_gc(L, LUA_GCCOUNTB, 0); in luaB_collectgarbage()
204 lua_pushnumber(L, res + ((lua_Number)b/1024)); in luaB_collectgarbage()
208 lua_pushboolean(L, res); in luaB_collectgarbage()
212 lua_pushnumber(L, res); in luaB_collectgarbage()
219 static int luaB_type (lua_State *L) { in luaB_type() argument
220 luaL_checkany(L, 1); in luaB_type()
221 lua_pushstring(L, luaL_typename(L, 1)); in luaB_type()
226 static int luaB_next (lua_State *L) { in luaB_next() argument
227 luaL_checktype(L, 1, LUA_TTABLE); in luaB_next()
228 lua_settop(L, 2); /* create a 2nd argument if there isn't one */ in luaB_next()
229 if (lua_next(L, 1)) in luaB_next()
232 lua_pushnil(L); in luaB_next()
238 static int luaB_pairs (lua_State *L) { in luaB_pairs() argument
239 luaL_checktype(L, 1, LUA_TTABLE); in luaB_pairs()
240 lua_pushvalue(L, lua_upvalueindex(1)); /* return generator, */ in luaB_pairs()
241 lua_pushvalue(L, 1); /* state, */ in luaB_pairs()
242 lua_pushnil(L); /* and initial value */ in luaB_pairs()
247 static int ipairsaux (lua_State *L) { in ipairsaux() argument
248 int i = luaL_checkint(L, 2); in ipairsaux()
249 luaL_checktype(L, 1, LUA_TTABLE); in ipairsaux()
251 lua_pushinteger(L, i); in ipairsaux()
252 lua_rawgeti(L, 1, i); in ipairsaux()
253 return (lua_isnil(L, -1)) ? 0 : 2; in ipairsaux()
257 static int luaB_ipairs (lua_State *L) { in luaB_ipairs() argument
258 luaL_checktype(L, 1, LUA_TTABLE); in luaB_ipairs()
259 lua_pushvalue(L, lua_upvalueindex(1)); /* return generator, */ in luaB_ipairs()
260 lua_pushvalue(L, 1); /* state, */ in luaB_ipairs()
261 lua_pushinteger(L, 0); /* and initial value */ in luaB_ipairs()
266 static int load_aux (lua_State *L, int status) { in load_aux() argument
270 lua_pushnil(L); in load_aux()
271 lua_insert(L, -2); /* put before error message */ in load_aux()
277 static int luaB_loadstring (lua_State *L) { in luaB_loadstring() argument
279 const char *s = luaL_checklstring(L, 1, &l); in luaB_loadstring()
280 const char *chunkname = luaL_optstring(L, 2, s); in luaB_loadstring()
281 return load_aux(L, luaL_loadbuffer(L, s, l, chunkname)); in luaB_loadstring()
285 static int luaB_loadfile (lua_State *L) { in luaB_loadfile() argument
286 const char *fname = luaL_optstring(L, 1, NULL); in luaB_loadfile()
287 return load_aux(L, luaL_loadfile(L, fname)); in luaB_loadfile()
297 static const char *generic_reader (lua_State *L, void *ud, size_t *size) { in generic_reader() argument
299 luaL_checkstack(L, 2, "too many nested functions"); in generic_reader()
300 lua_pushvalue(L, 1); /* get function */ in generic_reader()
301 lua_call(L, 0, 1); /* call it */ in generic_reader()
302 if (lua_isnil(L, -1)) { in generic_reader()
306 else if (lua_isstring(L, -1)) { in generic_reader()
307 lua_replace(L, 3); /* save string in a reserved stack slot */ in generic_reader()
308 return lua_tolstring(L, 3, size); in generic_reader()
310 else luaL_error(L, "reader function must return a string"); in generic_reader()
315 static int luaB_load (lua_State *L) { in luaB_load() argument
317 const char *cname = luaL_optstring(L, 2, "=(load)"); in luaB_load()
318 luaL_checktype(L, 1, LUA_TFUNCTION); in luaB_load()
319 lua_settop(L, 3); /* function, eventual name, plus one reserved slot */ in luaB_load()
320 status = lua_load(L, generic_reader, NULL, cname); in luaB_load()
321 return load_aux(L, status); in luaB_load()
325 static int luaB_dofile (lua_State *L) { in luaB_dofile() argument
326 const char *fname = luaL_optstring(L, 1, NULL); in luaB_dofile()
327 int n = lua_gettop(L); in luaB_dofile()
328 if (luaL_loadfile(L, fname) != 0) lua_error(L); in luaB_dofile()
329 lua_call(L, 0, LUA_MULTRET); in luaB_dofile()
330 return lua_gettop(L) - n; in luaB_dofile()
334 static int luaB_assert (lua_State *L) { in luaB_assert() argument
335 luaL_checkany(L, 1); in luaB_assert()
336 if (!lua_toboolean(L, 1)) in luaB_assert()
337 return luaL_error(L, "%s", luaL_optstring(L, 2, "assertion failed!")); in luaB_assert()
338 return lua_gettop(L); in luaB_assert()
342 static int luaB_unpack (lua_State *L) { in luaB_unpack() argument
344 luaL_checktype(L, 1, LUA_TTABLE); in luaB_unpack()
345 i = luaL_optint(L, 2, 1); in luaB_unpack()
346 e = luaL_opt(L, luaL_checkint, 3, luaL_getn(L, 1)); in luaB_unpack()
349 if (n <= 0 || !lua_checkstack(L, n)) /* n <= 0 means arith. overflow */ in luaB_unpack()
350 return luaL_error(L, "too many results to unpack"); in luaB_unpack()
351 lua_rawgeti(L, 1, i); /* push arg[i] (avoiding overflow problems) */ in luaB_unpack()
353 lua_rawgeti(L, 1, i); in luaB_unpack()
358 static int luaB_select (lua_State *L) { in luaB_select() argument
359 int n = lua_gettop(L); in luaB_select()
360 if (lua_type(L, 1) == LUA_TSTRING && *lua_tostring(L, 1) == '#') { in luaB_select()
361 lua_pushinteger(L, n-1); in luaB_select()
365 int i = luaL_checkint(L, 1); in luaB_select()
368 luaL_argcheck(L, 1 <= i, 1, "index out of range"); in luaB_select()
374 static int luaB_pcall (lua_State *L) { in luaB_pcall() argument
376 luaL_checkany(L, 1); in luaB_pcall()
377 status = lua_pcall(L, lua_gettop(L) - 1, LUA_MULTRET, 0); in luaB_pcall()
378 lua_pushboolean(L, (status == 0)); in luaB_pcall()
379 lua_insert(L, 1); in luaB_pcall()
380 return lua_gettop(L); /* return status + all results */ in luaB_pcall()
384 static int luaB_xpcall (lua_State *L) { in luaB_xpcall() argument
386 luaL_checkany(L, 2); in luaB_xpcall()
387 lua_settop(L, 2); in luaB_xpcall()
388 lua_insert(L, 1); /* put error function under function to be called */ in luaB_xpcall()
389 status = lua_pcall(L, 0, LUA_MULTRET, 1); in luaB_xpcall()
390 lua_pushboolean(L, (status == 0)); in luaB_xpcall()
391 lua_replace(L, 1); in luaB_xpcall()
392 return lua_gettop(L); /* return status + all results */ in luaB_xpcall()
396 static int luaB_tostring (lua_State *L) { in luaB_tostring() argument
397 luaL_checkany(L, 1); in luaB_tostring()
398 if (luaL_callmeta(L, 1, "__tostring")) /* is there a metafield? */ in luaB_tostring()
400 switch (lua_type(L, 1)) { in luaB_tostring()
402 lua_pushstring(L, lua_tostring(L, 1)); in luaB_tostring()
405 lua_pushvalue(L, 1); in luaB_tostring()
408 lua_pushstring(L, (lua_toboolean(L, 1) ? "true" : "false")); in luaB_tostring()
411 lua_pushliteral(L, "nil"); in luaB_tostring()
414 lua_pushfstring(L, "%s: %p", luaL_typename(L, 1), lua_topointer(L, 1)); in luaB_tostring()
421 static int luaB_newproxy (lua_State *L) { in luaB_newproxy() argument
422 lua_settop(L, 1); in luaB_newproxy()
423 lua_newuserdata(L, 0); /* create proxy */ in luaB_newproxy()
424 if (lua_toboolean(L, 1) == 0) in luaB_newproxy()
426 else if (lua_isboolean(L, 1)) { in luaB_newproxy()
427 lua_newtable(L); /* create a new metatable `m' ... */ in luaB_newproxy()
428 lua_pushvalue(L, -1); /* ... and mark `m' as a valid metatable */ in luaB_newproxy()
429 lua_pushboolean(L, 1); in luaB_newproxy()
430 lua_rawset(L, lua_upvalueindex(1)); /* weaktable[m] = true */ in luaB_newproxy()
434 if (lua_getmetatable(L, 1)) { in luaB_newproxy()
435 lua_rawget(L, lua_upvalueindex(1)); in luaB_newproxy()
436 validproxy = lua_toboolean(L, -1); in luaB_newproxy()
437 lua_pop(L, 1); /* remove value */ in luaB_newproxy()
439 luaL_argcheck(L, validproxy, 1, "boolean or proxy expected"); in luaB_newproxy()
440 lua_getmetatable(L, 1); /* metatable is valid; get it */ in luaB_newproxy()
442 lua_setmetatable(L, 2); in luaB_newproxy()
490 static int costatus (lua_State *L, lua_State *co) { in costatus() argument
491 if (L == co) return CO_RUN; in costatus()
510 static int luaB_costatus (lua_State *L) { in luaB_costatus() argument
511 lua_State *co = lua_tothread(L, 1); in luaB_costatus()
512 luaL_argcheck(L, co, 1, "coroutine expected"); in luaB_costatus()
513 lua_pushstring(L, statnames[costatus(L, co)]); in luaB_costatus()
518 static int auxresume (lua_State *L, lua_State *co, int narg) { in auxresume() argument
519 int status = costatus(L, co); in auxresume()
521 luaL_error(L, "too many arguments to resume"); in auxresume()
523 lua_pushfstring(L, "cannot resume %s coroutine", statnames[status]); in auxresume()
526 lua_xmove(L, co, narg); in auxresume()
527 lua_setlevel(L, co); in auxresume()
531 if (!lua_checkstack(L, nres + 1)) in auxresume()
532 luaL_error(L, "too many results to resume"); in auxresume()
533 lua_xmove(co, L, nres); /* move yielded values */ in auxresume()
537 lua_xmove(co, L, 1); /* move error message */ in auxresume()
543 static int luaB_coresume (lua_State *L) { in luaB_coresume() argument
544 lua_State *co = lua_tothread(L, 1); in luaB_coresume()
546 luaL_argcheck(L, co, 1, "coroutine expected"); in luaB_coresume()
547 r = auxresume(L, co, lua_gettop(L) - 1); in luaB_coresume()
549 lua_pushboolean(L, 0); in luaB_coresume()
550 lua_insert(L, -2); in luaB_coresume()
554 lua_pushboolean(L, 1); in luaB_coresume()
555 lua_insert(L, -(r + 1)); in luaB_coresume()
561 static int luaB_auxwrap (lua_State *L) { in luaB_auxwrap() argument
562 lua_State *co = lua_tothread(L, lua_upvalueindex(1)); in luaB_auxwrap()
563 int r = auxresume(L, co, lua_gettop(L)); in luaB_auxwrap()
565 if (lua_isstring(L, -1)) { /* error object is a string? */ in luaB_auxwrap()
566 luaL_where(L, 1); /* add extra info */ in luaB_auxwrap()
567 lua_insert(L, -2); in luaB_auxwrap()
568 lua_concat(L, 2); in luaB_auxwrap()
570 lua_error(L); /* propagate error */ in luaB_auxwrap()
576 static int luaB_cocreate (lua_State *L) { in luaB_cocreate() argument
577 lua_State *NL = lua_newthread(L); in luaB_cocreate()
578 luaL_argcheck(L, lua_isfunction(L, 1) && !lua_iscfunction(L, 1), 1, in luaB_cocreate()
580 lua_pushvalue(L, 1); /* move function to top */ in luaB_cocreate()
581 lua_xmove(L, NL, 1); /* move function from L to NL */ in luaB_cocreate()
586 static int luaB_cowrap (lua_State *L) { in luaB_cowrap() argument
587 luaB_cocreate(L); in luaB_cowrap()
588 lua_pushcclosure(L, luaB_auxwrap, 1); in luaB_cowrap()
593 static int luaB_yield (lua_State *L) { in luaB_yield() argument
594 return lua_yield(L, lua_gettop(L)); in luaB_yield()
598 static int luaB_corunning (lua_State *L) { in luaB_corunning() argument
599 if (lua_pushthread(L)) in luaB_corunning()
600 lua_pushnil(L); /* main thread is not a coroutine */ in luaB_corunning()
618 static void auxopen (lua_State *L, const char *name, in auxopen() argument
620 lua_pushcfunction(L, u); in auxopen()
621 lua_pushcclosure(L, f, 1); in auxopen()
622 lua_setfield(L, -2, name); in auxopen()
626 static void base_open (lua_State *L) { in base_open() argument
628 lua_pushvalue(L, LUA_GLOBALSINDEX); in base_open()
629 lua_setglobal(L, "_G"); in base_open()
631 luaL_register(L, "_G", base_funcs); in base_open()
632 lua_pushliteral(L, LUA_VERSION); in base_open()
633 lua_setglobal(L, "_VERSION"); /* set global _VERSION */ in base_open()
635 auxopen(L, "ipairs", luaB_ipairs, ipairsaux); in base_open()
636 auxopen(L, "pairs", luaB_pairs, luaB_next); in base_open()
638 lua_createtable(L, 0, 1); /* new table `w' */ in base_open()
639 lua_pushvalue(L, -1); /* `w' will be its own metatable */ in base_open()
640 lua_setmetatable(L, -2); in base_open()
641 lua_pushliteral(L, "kv"); in base_open()
642 lua_setfield(L, -2, "__mode"); /* metatable(w).__mode = "kv" */ in base_open()
643 lua_pushcclosure(L, luaB_newproxy, 1); in base_open()
644 lua_setglobal(L, "newproxy"); /* set global `newproxy' */ in base_open()
648 LUALIB_API int luaopen_base (lua_State *L) { in luaopen_base() argument
649 base_open(L); in luaopen_base()
650 luaL_register(L, LUA_COLIBNAME, co_funcs); in luaopen_base()