void CScriptStorage::reinit () { if (m_virtual_machine) lua_close (m_virtual_machine); #ifndef USE_DL_ALLOCATOR m_virtual_machine = lua_newstate(lua_alloc_xr, NULL); #else // USE_DL_ALLOCATOR m_virtual_machine = lua_newstate(lua_alloc_dl, NULL); #endif // USE_DL_ALLOCATOR if (!m_virtual_machine) { Msg ("! ERROR : Cannot initialize script virtual machine!"); return; } // initialize lua standard library functions struct luajit { static void open_lib (lua_State *L, pcstr module_name, lua_CFunction function) { lua_pushcfunction (L, function); lua_pushstring (L, module_name); lua_call (L, 1, 0); } }; // struct lua; luajit::open_lib (lua(), "", luaopen_base); luajit::open_lib (lua(), LUA_LOADLIBNAME, luaopen_package); luajit::open_lib (lua(), LUA_TABLIBNAME, luaopen_table); luajit::open_lib (lua(), LUA_IOLIBNAME, luaopen_io); luajit::open_lib (lua(), LUA_OSLIBNAME, luaopen_os); luajit::open_lib (lua(), LUA_MATHLIBNAME, luaopen_math); luajit::open_lib (lua(), LUA_STRLIBNAME, luaopen_string); #ifdef DEBUG luajit::open_lib (lua(), LUA_DBLIBNAME, luaopen_debug); #endif // #ifdef DEBUG if (!strstr(Core.Params,"-nojit")) { luajit::open_lib(lua(), LUA_JITLIBNAME, luaopen_jit); #ifndef DEBUG put_function (lua(), opt_lua_binary, sizeof(opt_lua_binary), "jit.opt"); put_function (lua(), opt_inline_lua_binary, sizeof(opt_lua_binary), "jit.opt_inline"); dojitopt (lua(), "2"); #endif // #ifndef DEBUG } if (strstr(Core.Params,"-_g")) file_header = file_header_new; else file_header = file_header_old; }
static int runargs(lua_State *L, char **argv, int n) { int i; for (i = 1; i < n; i++) { if (argv[i] == NULL) continue; lua_assert(argv[i][0] == '-'); switch (argv[i][1]) { /* option */ case 'e': { const char *chunk = argv[i] + 2; if (*chunk == '\0') chunk = argv[++i]; lua_assert(chunk != NULL); if (dostring(L, chunk, "=(command line)") != 0) return 1; break; } case 'l': { const char *filename = argv[i] + 2; if (*filename == '\0') filename = argv[++i]; lua_assert(filename != NULL); if (dolibrary(L, filename)) return 1; /* stop if file fails */ break; } case 'j': { /* LuaJIT extension */ const char *cmd = argv[i] + 2; if (*cmd == '\0') cmd = argv[++i]; lua_assert(cmd != NULL); if (dojitcmd(L, cmd)) return 1; break; } case 'O': /* LuaJIT extension */ if (dojitopt(L, argv[i] + 2)) return 1; break; case 'b': /* LuaJIT extension */ return dobytecode(L, argv+i); default: break; } } return 0; }