Actually don't start if sysrc.lua is bad
This commit is contained in:
parent
b021e7b5af
commit
99577e806a
2 changed files with 19 additions and 10 deletions
|
@ -85,7 +85,7 @@ struct lua_state
|
||||||
|
|
||||||
void do_eval_lua(const std::string& c) throw(std::bad_alloc);
|
void do_eval_lua(const std::string& c) throw(std::bad_alloc);
|
||||||
void do_run_lua(const std::string& c) throw(std::bad_alloc);
|
void do_run_lua(const std::string& c) throw(std::bad_alloc);
|
||||||
void run_sysrc_lua();
|
void run_sysrc_lua(bool rerun);
|
||||||
|
|
||||||
bool requests_repaint;
|
bool requests_repaint;
|
||||||
bool requests_subframe_paint;
|
bool requests_subframe_paint;
|
||||||
|
@ -103,7 +103,7 @@ struct lua_state
|
||||||
std::list<std::string> startup_scripts;
|
std::list<std::string> startup_scripts;
|
||||||
std::map<std::string, std::u32string> watch_vars;
|
std::map<std::string, std::u32string> watch_vars;
|
||||||
private:
|
private:
|
||||||
void run_lua_fragment() throw(std::bad_alloc);
|
bool run_lua_fragment() throw(std::bad_alloc);
|
||||||
template<typename... T> bool run_callback(lua::state::callback_list& list, T... args);
|
template<typename... T> bool run_callback(lua::state::callback_list& list, T... args);
|
||||||
void run_synchronous_paint(struct lua::render_context* ctx);
|
void run_synchronous_paint(struct lua::render_context* ctx);
|
||||||
lua::state& L;
|
lua::state& L;
|
||||||
|
|
|
@ -371,7 +371,7 @@ namespace
|
||||||
core.lua->reset();
|
core.lua->reset();
|
||||||
luaL_openlibs(core.lua->handle());
|
luaL_openlibs(core.lua->handle());
|
||||||
|
|
||||||
core.lua2->run_sysrc_lua();
|
core.lua2->run_sysrc_lua(true);
|
||||||
copy_system_tables(*core.lua);
|
copy_system_tables(*core.lua);
|
||||||
messages << "Lua VM reset" << std::endl;
|
messages << "Lua VM reset" << std::endl;
|
||||||
});
|
});
|
||||||
|
@ -412,7 +412,7 @@ void init_lua() throw()
|
||||||
fatal_error();
|
fatal_error();
|
||||||
}
|
}
|
||||||
luaL_openlibs(core.lua->handle());
|
luaL_openlibs(core.lua->handle());
|
||||||
core.lua2->run_sysrc_lua();
|
core.lua2->run_sysrc_lua(false);
|
||||||
copy_system_tables(*core.lua);
|
copy_system_tables(*core.lua);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -501,10 +501,11 @@ const std::map<std::string, std::u32string>& lua_state::get_watch_vars()
|
||||||
return watch_vars;
|
return watch_vars;
|
||||||
}
|
}
|
||||||
|
|
||||||
void lua_state::run_lua_fragment() throw(std::bad_alloc)
|
bool lua_state::run_lua_fragment() throw(std::bad_alloc)
|
||||||
{
|
{
|
||||||
|
bool result = true;
|
||||||
if(recursive_flag)
|
if(recursive_flag)
|
||||||
return;
|
return false;
|
||||||
#if LUA_VERSION_NUM == 501
|
#if LUA_VERSION_NUM == 501
|
||||||
int t = L.load(read_lua_fragment, &luareader_fragment, "run_lua_fragment");
|
int t = L.load(read_lua_fragment, &luareader_fragment, "run_lua_fragment");
|
||||||
#endif
|
#endif
|
||||||
|
@ -515,12 +516,12 @@ void lua_state::run_lua_fragment() throw(std::bad_alloc)
|
||||||
messages << "Can't run Lua: Internal syntax error: " << L.tostring(-1)
|
messages << "Can't run Lua: Internal syntax error: " << L.tostring(-1)
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
L.pop(1);
|
L.pop(1);
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
if(t == LUA_ERRMEM) {
|
if(t == LUA_ERRMEM) {
|
||||||
messages << "Can't run Lua: Out of memory" << std::endl;
|
messages << "Can't run Lua: Out of memory" << std::endl;
|
||||||
L.pop(1);
|
L.pop(1);
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
recursive_flag = true;
|
recursive_flag = true;
|
||||||
int r = L.pcall(0, 0, 0);
|
int r = L.pcall(0, 0, 0);
|
||||||
|
@ -528,20 +529,24 @@ void lua_state::run_lua_fragment() throw(std::bad_alloc)
|
||||||
if(r == LUA_ERRRUN) {
|
if(r == LUA_ERRRUN) {
|
||||||
messages << "Error running Lua hunk: " << L.tostring(-1) << std::endl;
|
messages << "Error running Lua hunk: " << L.tostring(-1) << std::endl;
|
||||||
L.pop(1);
|
L.pop(1);
|
||||||
|
result = false;
|
||||||
}
|
}
|
||||||
if(r == LUA_ERRMEM) {
|
if(r == LUA_ERRMEM) {
|
||||||
messages << "Error running Lua hunk: Out of memory" << std::endl;
|
messages << "Error running Lua hunk: Out of memory" << std::endl;
|
||||||
L.pop(1);
|
L.pop(1);
|
||||||
|
result = false;
|
||||||
}
|
}
|
||||||
if(r == LUA_ERRERR) {
|
if(r == LUA_ERRERR) {
|
||||||
messages << "Error running Lua hunk: Double Fault???" << std::endl;
|
messages << "Error running Lua hunk: Double Fault???" << std::endl;
|
||||||
L.pop(1);
|
L.pop(1);
|
||||||
|
result = false;
|
||||||
}
|
}
|
||||||
render_ctx = NULL;
|
render_ctx = NULL;
|
||||||
if(requests_repaint) {
|
if(requests_repaint) {
|
||||||
requests_repaint = false;
|
requests_repaint = false;
|
||||||
command.invoke("repaint");
|
command.invoke("repaint");
|
||||||
}
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void lua_state::do_eval_lua(const std::string& c) throw(std::bad_alloc)
|
void lua_state::do_eval_lua(const std::string& c) throw(std::bad_alloc)
|
||||||
|
@ -582,12 +587,16 @@ template<typename... T> bool lua_state::run_callback(lua::state::callback_list&
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void lua_state::run_sysrc_lua()
|
void lua_state::run_sysrc_lua(bool rerun)
|
||||||
{
|
{
|
||||||
L.pushstring(lua_sysrc_script);
|
L.pushstring(lua_sysrc_script);
|
||||||
L.setglobal(TEMPORARY);
|
L.setglobal(TEMPORARY);
|
||||||
luareader_fragment = eval_sysrc_lua;
|
luareader_fragment = eval_sysrc_lua;
|
||||||
run_lua_fragment();
|
if(!run_lua_fragment() && !rerun) {
|
||||||
|
//run_lua_fragment shows error.
|
||||||
|
//messages << "Failed to run sysrc lua script" << std::endl;
|
||||||
|
fatal_error();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void lua_state::run_synchronous_paint(struct lua::render_context* ctx)
|
void lua_state::run_synchronous_paint(struct lua::render_context* ctx)
|
||||||
|
|
Loading…
Add table
Reference in a new issue