003 File Manager
Current Path:
/usr/src/sys/contrib/openzfs/module/lua
usr
/
src
/
sys
/
contrib
/
openzfs
/
module
/
lua
/
📁
..
📄
Makefile.in
(852 B)
📄
README.zfs
(3.38 KB)
📄
lapi.c
(30.73 KB)
📄
lapi.h
(583 B)
📄
lauxlib.c
(22.21 KB)
📄
lbaselib.c
(7.23 KB)
📄
lcode.c
(22.03 KB)
📄
lcode.h
(3.08 KB)
📄
lcompat.c
(1.43 KB)
📄
lcorolib.c
(3.59 KB)
📄
lctype.c
(2.26 KB)
📄
lctype.h
(1.83 KB)
📄
ldebug.c
(16.15 KB)
📄
ldebug.h
(1.1 KB)
📄
ldo.c
(22.2 KB)
📄
ldo.h
(1.53 KB)
📄
lfunc.c
(4.19 KB)
📄
lfunc.h
(1.06 KB)
📄
lgc.c
(36.9 KB)
📄
lgc.h
(5.31 KB)
📄
llex.c
(15.02 KB)
📄
llex.h
(2.18 KB)
📄
llimits.h
(7.73 KB)
📄
lmem.c
(2.61 KB)
📄
lmem.h
(1.79 KB)
📄
lobject.c
(7.68 KB)
📄
lobject.h
(14.62 KB)
📄
lopcodes.c
(3.04 KB)
📄
lopcodes.h
(8.32 KB)
📄
lparser.c
(45.19 KB)
📄
lparser.h
(3.29 KB)
📄
lstate.c
(7.54 KB)
📄
lstate.h
(7.46 KB)
📄
lstring.c
(4.85 KB)
📄
lstring.h
(1.28 KB)
📄
lstrlib.c
(28.3 KB)
📄
ltable.c
(16.18 KB)
📄
ltable.h
(1.42 KB)
📄
ltablib.c
(7.62 KB)
📄
ltm.c
(1.78 KB)
📄
ltm.h
(1.14 KB)
📄
lvm.c
(30.16 KB)
📄
lvm.h
(1.49 KB)
📄
lzio.c
(1.61 KB)
📄
lzio.h
(1.5 KB)
📁
setjmp
Editing: lcorolib.c
/* BEGIN CSTYLED */ /* ** $Id: lcorolib.c,v 1.5.1.1 2013/04/12 18:48:47 roberto Exp $ ** Coroutine Library ** See Copyright Notice in lua.h */ #define lcorolib_c #define LUA_LIB #include <sys/lua/lua.h> #include <sys/lua/lauxlib.h> #include <sys/lua/lualib.h> static int auxresume (lua_State *L, lua_State *co, int narg) { int status; if (!lua_checkstack(co, narg)) { lua_pushliteral(L, "too many arguments to resume"); return -1; /* error flag */ } if (lua_status(co) == LUA_OK && lua_gettop(co) == 0) { lua_pushliteral(L, "cannot resume dead coroutine"); return -1; /* error flag */ } lua_xmove(L, co, narg); status = lua_resume(co, L, narg); if (status == LUA_OK || status == LUA_YIELD) { int nres = lua_gettop(co); if (!lua_checkstack(L, nres + 1)) { lua_pop(co, nres); /* remove results anyway */ lua_pushliteral(L, "too many results to resume"); return -1; /* error flag */ } lua_xmove(co, L, nres); /* move yielded values */ return nres; } else { lua_xmove(co, L, 1); /* move error message */ return -1; /* error flag */ } } static int luaB_coresume (lua_State *L) { lua_State *co = lua_tothread(L, 1); int r; luaL_argcheck(L, co, 1, "coroutine expected"); r = auxresume(L, co, lua_gettop(L) - 1); if (r < 0) { lua_pushboolean(L, 0); lua_insert(L, -2); return 2; /* return false + error message */ } else { lua_pushboolean(L, 1); lua_insert(L, -(r + 1)); return r + 1; /* return true + 'resume' returns */ } } static int luaB_auxwrap (lua_State *L) { lua_State *co = lua_tothread(L, lua_upvalueindex(1)); int r = auxresume(L, co, lua_gettop(L)); if (r < 0) { if (lua_isstring(L, -1)) { /* error object is a string? */ luaL_where(L, 1); /* add extra info */ lua_insert(L, -2); lua_concat(L, 2); } return lua_error(L); /* propagate error */ } return r; } static int luaB_cocreate (lua_State *L) { lua_State *NL; luaL_checktype(L, 1, LUA_TFUNCTION); NL = lua_newthread(L); lua_pushvalue(L, 1); /* move function to top */ lua_xmove(L, NL, 1); /* move function from L to NL */ return 1; } static int luaB_cowrap (lua_State *L) { luaB_cocreate(L); lua_pushcclosure(L, luaB_auxwrap, 1); return 1; } static int luaB_yield (lua_State *L) { return lua_yield(L, lua_gettop(L)); } static int luaB_costatus (lua_State *L) { lua_State *co = lua_tothread(L, 1); luaL_argcheck(L, co, 1, "coroutine expected"); if (L == co) lua_pushliteral(L, "running"); else { switch (lua_status(co)) { case LUA_YIELD: lua_pushliteral(L, "suspended"); break; case LUA_OK: { lua_Debug ar; if (lua_getstack(co, 0, &ar) > 0) /* does it have frames? */ lua_pushliteral(L, "normal"); /* it is running */ else if (lua_gettop(co) == 0) lua_pushliteral(L, "dead"); else lua_pushliteral(L, "suspended"); /* initial state */ break; } default: /* some error occurred */ lua_pushliteral(L, "dead"); break; } } return 1; } static int luaB_corunning (lua_State *L) { int ismain = lua_pushthread(L); lua_pushboolean(L, ismain); return 2; } static const luaL_Reg co_funcs[] = { {"create", luaB_cocreate}, {"resume", luaB_coresume}, {"running", luaB_corunning}, {"status", luaB_costatus}, {"wrap", luaB_cowrap}, {"yield", luaB_yield}, {NULL, NULL} }; LUAMOD_API int luaopen_coroutine (lua_State *L) { luaL_newlib(L, co_funcs); return 1; } #if defined(_KERNEL) EXPORT_SYMBOL(luaopen_coroutine); #endif /* END CSTYLED */
Upload File
Create Folder