diff options
Diffstat (limited to 'deps/sol2/examples/source/exception_handler.cpp')
-rw-r--r-- | deps/sol2/examples/source/exception_handler.cpp | 54 |
1 files changed, 0 insertions, 54 deletions
diff --git a/deps/sol2/examples/source/exception_handler.cpp b/deps/sol2/examples/source/exception_handler.cpp deleted file mode 100644 index 5fdb4dd..0000000 --- a/deps/sol2/examples/source/exception_handler.cpp +++ /dev/null @@ -1,54 +0,0 @@ -#define SOL_ALL_SAFETIES_ON 1 -#include <sol/sol.hpp> - -#include "assert.hpp" - -#include <iostream> - -int my_exception_handler(lua_State* L, sol::optional<const std::exception&> maybe_exception, sol::string_view description) { - // L is the lua state, which you can wrap in a state_view if necessary - // maybe_exception will contain exception, if it exists - // description will either be the what() of the exception or a description saying that we hit the general-case catch(...) - std::cout << "An exception occurred in a function, here's what it says "; - if (maybe_exception) { - std::cout << "(straight from the exception): "; - const std::exception& ex = *maybe_exception; - std::cout << ex.what() << std::endl; - } - else { - std::cout << "(from the description parameter): "; - std::cout.write(description.data(), description.size()); - std::cout << std::endl; - } - - // you must push 1 element onto the stack to be - // transported through as the error object in Lua - // note that Lua -- and 99.5% of all Lua users and libraries -- expects a string - // so we push a single string (in our case, the description of the error) - return sol::stack::push(L, description); -} - -void will_throw() { - throw std::runtime_error("oh no not an exception!!!"); -} - -int main() { - std::cout << "=== exception_handler ===" << std::endl; - - sol::state lua; - lua.open_libraries(sol::lib::base); - lua.set_exception_handler(&my_exception_handler); - - lua.set_function("will_throw", &will_throw); - - sol::protected_function_result pfr = lua.safe_script("will_throw()", &sol::script_pass_on_error); - - c_assert(!pfr.valid()); - - sol::error err = pfr; - std::cout << err.what() << std::endl; - - std::cout << std::endl; - - return 0; -} |