コード例 #1
0
ファイル: script_storage.cpp プロジェクト: 2asoft/xray
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;
}
コード例 #2
0
ファイル: gsl-shell-jit.c プロジェクト: LuaDist/gsl-shell
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;
}