aboutsummaryrefslogtreecommitdiffstats
path: root/deps/sol2/examples/source/script_error_handling.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'deps/sol2/examples/source/script_error_handling.cpp')
-rw-r--r--deps/sol2/examples/source/script_error_handling.cpp86
1 files changed, 0 insertions, 86 deletions
diff --git a/deps/sol2/examples/source/script_error_handling.cpp b/deps/sol2/examples/source/script_error_handling.cpp
deleted file mode 100644
index 2c23af4..0000000
--- a/deps/sol2/examples/source/script_error_handling.cpp
+++ /dev/null
@@ -1,86 +0,0 @@
-#define SOL_ALL_SAFETIES_ON 1
-#include <sol/sol.hpp>
-
-#include "assert.hpp"
-#include <iostream>
-
-int main(int, char**) {
- std::cout << "=== script error handling ===" << std::endl;
-
- sol::state lua;
-
- std::string code = R"(
-bad&$#*$syntax
-bad.code = 2
-return 24
-)";
-
- /* OPTION 1 */
- // Handling code like this can be robust
- // If you disable exceptions, then obviously you would remove
- // the try-catch branches,
- // and then rely on the `lua_atpanic` function being called
- // and trapping errors there before exiting the application
- {
- // script_default_on_error throws / panics when the code is bad: trap the error
- try {
- int value = lua.script(code, sol::script_default_on_error);
- // This will never be reached
- std::cout << value << std::endl;
- c_assert(value == 24);
- }
- catch (const sol::error& err) {
- std::cout << "Something went horribly wrong: thrown error" << "\n\t" << err.what() << std::endl;
- }
- }
-
- /* OPTION 2 */
- // Use the script_pass_on_error handler
- // this simply passes through the protected_function_result,
- // rather than throwing it or calling panic
- // This will check code validity and also whether or not it runs well
- {
- sol::protected_function_result result = lua.script(code, sol::script_pass_on_error);
- c_assert(!result.valid());
- if (!result.valid()) {
- sol::error err = result;
- sol::call_status status = result.status();
- std::cout << "Something went horribly wrong: " << sol::to_string(status) << " error" << "\n\t" << err.what() << std::endl;
- }
- }
-
- /* OPTION 3 */
- // This is a lower-level, more explicit way to load code
- // This explicitly loads the code, giving you access to any errors
- // plus the load status
- // then, it turns the loaded code into a sol::protected_function
- // which is then called so that the code can run
- // you can then check that too, for any errors
- // The two previous approaches are recommended
- {
- sol::load_result loaded_chunk = lua.load(code);
- c_assert(!loaded_chunk.valid());
- if (!loaded_chunk.valid()) {
- sol::error err = loaded_chunk;
- sol::load_status status = loaded_chunk.status();
- std::cout << "Something went horribly wrong loading the code: " << sol::to_string(status) << " error" << "\n\t" << err.what() << std::endl;
- }
- else {
- // Because the syntax is bad, this will never be reached
- c_assert(false);
- // If there is a runtime error (lua GC memory error, nil access, etc.)
- // it will be caught here
- sol::protected_function script_func = loaded_chunk;
- sol::protected_function_result result = script_func();
- if (!result.valid()) {
- sol::error err = result;
- sol::call_status status = result.status();
- std::cout << "Something went horribly wrong running the code: " << sol::to_string(status) << " error" << "\n\t" << err.what() << std::endl;
- }
- }
- }
-
- std::cout << std::endl;
-
- return 0;
-}