void LuaThread::threadFunction() { this->retain(); lua_State * L = lua_open(); luaL_openlibs(L); #ifdef LOVE_BUILD_STANDALONE love::luax_preload(L, luaopen_love, "love"); luaopen_love(L); #endif // LOVE_BUILD_STANDALONE luaopen_love_thread(L); if (luaL_loadbuffer(L, (const char *) code->getData(), code->getSize(), name.c_str()) != 0) error = luax_tostring(L, -1); else if (lua_pcall(L, 0, 0, 0) != 0) error = luax_tostring(L, -1); lua_close(L); this->release(); }
int main(int argc, char **argv) { #ifdef LOVE_LEGENDARY_UTF8_ARGV_HACK int hack_argc = 0; char **hack_argv = 0; get_utf8_arguments(hack_argc, hack_argv); argc = hack_argc; argv = hack_argv; #endif // LOVE_LEGENDARY_UTF8_ARGV_HACK // Oh, you just want the version? Okay! if (argc > 1 && strcmp(argv[1],"--version") == 0) { printf("LOVE %s (%s)\n", love_version(), love_codename()); return 0; } // Create the virtual machine. lua_State *L = lua_open(); luaL_openlibs(L); love_preload(L, luaopen_love, "love"); luaopen_love(L); // Add command line arguments to global arg (like stand-alone Lua). { lua_newtable(L); if (argc > 0) { lua_pushstring(L, argv[0]); lua_rawseti(L, -2, -2); } lua_pushstring(L, "embedded boot.lua"); lua_rawseti(L, -2, -1); for (int i = 1; i<argc; i++) { lua_pushstring(L, argv[i]); lua_rawseti(L, -2, i); } lua_setglobal(L, "arg"); } // Add love.__exe = true. // This indicates that we're running the // standalone version of love, and not the // DLL version. { lua_getglobal(L, "love"); lua_pushboolean(L, 1); lua_setfield(L, -2, "_exe"); lua_pop(L, 1); } // Boot luaopen_love_boot(L); lua_call(L, 0, 1); int retval = 0; if (lua_isnumber(L, 1)) retval = (int) lua_tonumber(L, 1); lua_close(L); #ifdef LOVE_LEGENDARY_UTF8_ARGV_HACK if (hack_argv) { for (int i = 0; i<hack_argc; ++i) delete [] hack_argv[i]; delete [] hack_argv; } #endif // LOVE_LEGENDARY_UTF8_ARGV_HACK return retval; }
int main_prepare(int argc, char ** argv) { // Oh, you just want the version? Okay! if(argc > 1 && strcmp(argv[1],"--version") == 0) { printf("LOVE %s (%s)\n", love::VERSION_STR, love::VERSION_CODENAME); return 0; } // Create the virtual machine. L = lua_open(); luaL_openlibs(L); love::luax_preload(L, luaopen_love, "love"); luaopen_love(L); // Add command line arguments to global arg (like stand-alone Lua). { lua_newtable(L); if(argc > 0) { lua_pushstring(L, argv[0]); lua_rawseti(L, -2, -2); } lua_pushstring(L, "embedded boot.lua"); lua_rawseti(L, -2, -1); for(int i = 1; i<argc; i++) { lua_pushstring(L, argv[i]); lua_rawseti(L, -2, i); } lua_setglobal(L, "arg"); } // Add love.__exe = true. // This indicates that we're running the // standalone version of love, and not the // DLL version. { lua_getglobal(L, "love"); lua_pushboolean(L, 1); lua_setfield(L, -2, "_exe"); lua_pop(L, 1); } // Setup android specific stuff android_prepare(L); // Boot if (luaL_loadbuffer(L, (const char *)love::boot_lua, sizeof(love::boot_lua), "boot.lua") == 0) { int result = lua_pcall(L, 0, 0, 0); if (result != 0) { LOGE(lua_tostring(L, -1)); lua_pop(L, 1); } } return 0; }