TMODENTRY int luaopen_tek_lib_exec(lua_State *L) { TAPTR *pexec; TTAGITEM tags[2]; TAPTR basetask; lua_newtable(L); /* s: libtab */ pexec = lua_newuserdata(L, sizeof(TAPTR)); /* s: libtab, udata */ *pexec = TNULL; luaL_newmetatable(L, "tek.lib.exec.base.meta"); /* s: libtab, udata, metatable */ lua_pushliteral(L, "__gc"); /* s: libtab, udata, metatable, "__gc" */ lua_pushcfunction(L, tek_lib_exec_base_gc); /* s: libtab, udata, metatable, "__gc", gcfunc */ lua_rawset(L, -3); /* s: libtab, udata, metatable */ lua_setmetatable(L, -2); /* s: libtab, udata */ lua_setfield(L, -2, "base"); /* s: libtab */ tags[0].tti_Tag = TExecBase_ModInit; tags[0].tti_Value = (TTAG) tek_lib_exec_initmodules; tags[1].tti_Tag = TTAG_DONE; basetask = TEKCreate(tags); if (basetask == TNULL) luaL_error(L, "Failed to initialize TEKlib"); *pexec = TGetExecBase(basetask); return 1; }
TMODENTRY int luaopen_tek_lib_exec(lua_State *L) { struct TExecBase *TExecBase; struct LuaExecTask *lexec; TTAGITEM tags[2]; luaL_newmetatable(L, TEK_LIB_EXEC_CLASSNAME); tek_lua_register(L, NULL, tek_lib_exec_methods, 0); /* execmeta */ #if defined(ENABLE_TASKS) luaL_newmetatable(L, TEK_LIB_TASK_CLASSNAME); /* execmeta, taskmeta */ lua_pushvalue(L, -2); /* execmeta, taskmeta, execmeta */ tek_lua_register(L, NULL, tek_lib_exec_child_methods, 1); lua_pushvalue(L, -1); /* execmeta, taskmeta, taskmeta */ lua_setfield(L, -2, "__index"); lua_pop(L, 1); /* execmeta */ #endif lexec = (struct LuaExecTask *)lua_newuserdata(L, sizeof(struct LuaExecTask)); /* execmeta, luaexec */ lexec->exec = TNULL; lua_pushvalue(L, -1); /* execmeta, luaexec, luaexec */ lua_pushvalue(L, -3); /* execmeta, luaexec, luaexec, execmeta */ tek_lua_register(L, "tek.lib.exec", tek_lib_exec_funcs, 2); /* execmeta, luaexec, libtab */ lua_pushvalue(L, -2); /* execmeta, luaexec, libtab, libtab */ lua_pushvalue(L, -4); /* execmeta, luaexec, libtab, libtab, execmeta */ lua_remove(L, -4); lua_remove(L, -4); /* libtab, libtab, execmeta */ lua_setmetatable(L, -2); /* libtab, libtab */ lua_setfield(L, -2, "base"); /* libtab */ tags[0].tti_Tag = TExecBase_ModInit; tags[0].tti_Value = (TTAG) tek_lib_exec_initmodules; tags[1].tti_Tag = TTAG_DONE; lexec->task = TEKCreate(tags); if (lexec->task == TNULL) luaL_error(L, "Failed to initialize TEKlib"); lexec->exec = TExecBase = (struct TExecBase *)TGetExecBase(lexec->task); #if defined(ENABLE_TASKS) if (!tek_lib_exec_init_link_to_parent(L, lexec)) { lua_pop(L, 1); return 0; } #endif return 1; }