示例#1
0
文件: exec_lua.c 项目: ld-test/tekui
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;
}
示例#2
0
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;
}