int luahelper_taskadd(const char* taskscript) { int ret; int ref; size_t taskscriptlen = strlen(taskscript); char* newTaskScript; ls_lua_init(); ls_lua_getfield(L, LUA_GLOBALSINDEX, "lanes"); /* lanes */ ls_lua_getfield(L, -1, "gen"); /* lanes gen */ ls_lua_pushstring(L, "*"); /* lanes gen * */ newTaskScript = malloc( taskscriptlen + 1 ); strncpy(newTaskScript, taskscript, taskscriptlen); newTaskScript[taskscriptlen] = 0; ret = ls_luaL_loadstring(L, newTaskScript); /* lanes gen * script */ if (ret != 0) { if (ls_lua_isstring(L, -1)) printf("jam: Error compiling Lua lane\n%s\n", ls_lua_tostring(L, -1)); ls_lua_pop(L, 2); printf("%s\n", newTaskScript); free(newTaskScript); return -1; } free(newTaskScript); ret = ls_lua_pcall(L, 2, 1, 0); /* lanes lane_h */ if (ret != 0) { if (ls_lua_isstring(L, -1)) printf("jam: Error creating Lua lane\n%s\n", ls_lua_tostring(L, -1)); ls_lua_pop(L, 2); return -1; } if (!ls_lua_isfunction(L, -1)) /* lanes lane_h */ { ls_lua_pop(L, 2); return -1; } ret = ls_lua_pcall(L, 0, 1, 0); /* lanes ret */ if (ret != 0) { if (ls_lua_isstring(L, -1)) printf("jam: Error calling Lua lane\n%s\n", ls_lua_tostring(L, -1)); ls_lua_pop(L, 2); return -1; } ref = ls_luaL_ref(L, LUA_REGISTRYINDEX); ls_lua_pop(L, 1); return ref; }
int luahelper_taskadd(const char* taskscript, LOL* args) { int ret; int ref; size_t taskscriptlen = strlen(taskscript); char* newTaskScript; int i; ls_lua_init(); ls_lua_getglobal(L, "lanes"); /* lanes */ ls_lua_getfield(L, -1, "gen"); /* lanes gen */ ls_lua_pushstring(L, "*"); /* lanes gen * */ newTaskScript = malloc( taskscriptlen + 1 ); strncpy(newTaskScript, taskscript, taskscriptlen); newTaskScript[taskscriptlen] = 0; ret = ls_luaL_loadstring(L, newTaskScript); /* lanes gen * script */ if (ret != 0) { if (ls_lua_isstring(L, -1)) printf("jam: Error compiling Lua lane\n%s\n", ls_lua_tostring(L, -1)); ls_lua_pop(L, 2); printf("%s\n", newTaskScript); free(newTaskScript); return -1; } free(newTaskScript); ret = ls_lua_pcall(L, 2, 1, 0); /* lanes lane_h */ if (ret != 0) { if (ls_lua_isstring(L, -1)) printf("jam: Error creating Lua lane\n%s\n", ls_lua_tostring(L, -1)); ls_lua_pop(L, 2); return -1; } if (!ls_lua_isfunction(L, -1)) /* lanes lane_h */ { ls_lua_pop(L, 2); return -1; } for (i = 0; i < args->count; ++i) { LIST* list = lol_get(args, i); LISTITEM *l2; int index = 0; ls_lua_newtable(L); for (l2 = list_first(list); l2; l2 = list_next(l2)) { ls_lua_pushstring(L, list_value(l2)); ls_lua_rawseti(L, -2, ++index); } } ret = ls_lua_pcall(L, args->count, 1, 0); /* lanes ret */ if (ret != 0) { if (ls_lua_isstring(L, -1)) printf("jam: Error calling Lua lane\n%s\n", ls_lua_tostring(L, -1)); ls_lua_pop(L, 2); return -1; } ref = ls_luaL_ref(L, LUA_REGISTRYINDEX); ls_lua_pop(L, 1); return ref; }