diff options
author | Mattes D <github@xoft.cz> | 2015-05-16 16:19:18 +0200 |
---|---|---|
committer | Mattes D <github@xoft.cz> | 2015-05-16 16:19:18 +0200 |
commit | 1240c76cb472931253e2ce502356c0428f974c5a (patch) | |
tree | 8c371d731155410d6fad5ce7422448ed2bf19c1b /src/Bindings | |
parent | PathFinder uses UniquePtr for cell map. (diff) | |
download | cuberite-1240c76cb472931253e2ce502356c0428f974c5a.tar cuberite-1240c76cb472931253e2ce502356c0428f974c5a.tar.gz cuberite-1240c76cb472931253e2ce502356c0428f974c5a.tar.bz2 cuberite-1240c76cb472931253e2ce502356c0428f974c5a.tar.lz cuberite-1240c76cb472931253e2ce502356c0428f974c5a.tar.xz cuberite-1240c76cb472931253e2ce502356c0428f974c5a.tar.zst cuberite-1240c76cb472931253e2ce502356c0428f974c5a.zip |
Diffstat (limited to 'src/Bindings')
-rw-r--r-- | src/Bindings/LuaState.cpp | 26 | ||||
-rw-r--r-- | src/Bindings/LuaState.h | 3 |
2 files changed, 29 insertions, 0 deletions
diff --git a/src/Bindings/LuaState.cpp b/src/Bindings/LuaState.cpp index ccf812417..08c7e19d7 100644 --- a/src/Bindings/LuaState.cpp +++ b/src/Bindings/LuaState.cpp @@ -927,6 +927,9 @@ bool cLuaState::CheckParamTable(int a_StartParam, int a_EndParam) VERIFY(lua_getstack(m_LuaState, 0, &entry)); VERIFY(lua_getinfo (m_LuaState, "n", &entry)); AString ErrMsg = Printf("#ferror in function '%s'.", (entry.name != nullptr) ? entry.name : "?"); + + BreakIntoDebugger(m_LuaState); + tolua_error(m_LuaState, ErrMsg.c_str(), &tolua_err); return false; } // for i - Param @@ -1366,6 +1369,7 @@ int cLuaState::ReportFnCallErrors(lua_State * a_LuaState) { LOGWARNING("LUA: %s", lua_tostring(a_LuaState, -1)); LogStackTrace(a_LuaState, 1); + BreakIntoDebugger(a_LuaState); return 1; // We left the error message on the stack as the return value } @@ -1373,6 +1377,28 @@ int cLuaState::ReportFnCallErrors(lua_State * a_LuaState) +int cLuaState::BreakIntoDebugger(lua_State * a_LuaState) +{ + // Call the BreakIntoDebugger function, if available: + lua_getglobal(a_LuaState, "BreakIntoDebugger"); + if (!lua_isfunction(a_LuaState, -1)) + { + LOGD("LUA: BreakIntoDebugger() not found / not a function"); + lua_pop(a_LuaState, 1); + return 1; + } + lua_insert(a_LuaState, -2); // Copy the string that has been passed to us + LOGD("Calling BreakIntoDebugger()..."); + lua_call(a_LuaState, 1, 0); + LOGD("Returned from BreakIntoDebugger()."); + + return 0; +} + + + + + //////////////////////////////////////////////////////////////////////////////// // cLuaState::cRef: diff --git a/src/Bindings/LuaState.h b/src/Bindings/LuaState.h index b38401fd8..5b4ec3ae4 100644 --- a/src/Bindings/LuaState.h +++ b/src/Bindings/LuaState.h @@ -389,6 +389,9 @@ protected: /** Used as the error reporting function for function calls */ static int ReportFnCallErrors(lua_State * a_LuaState); + + /** Tries to break into the MobDebug debugger, if it is installed. */ + static int BreakIntoDebugger(lua_State * a_LuaState); } ; |