diff options
author | Andy <drumsetmonkey@gmail.com> | 2019-08-29 13:07:45 -0400 |
---|---|---|
committer | Andy <drumsetmonkey@gmail.com> | 2019-08-29 13:07:45 -0400 |
commit | 4ac4b280abf2ffa28caa5a532353115a3033444f (patch) | |
tree | 2a13d658bb454360b2faf401244bb0321d3460d4 /lib/sol2/examples/source/error_handler.cpp | |
parent | e9758416b18b27a65337c28d9641afc0ee89b34b (diff) | |
parent | 7a46fa2dd3dad3f038bf8e7339bc67abca428ae6 (diff) |
Started creating scripting library/namespace and added sol2 for interfacing
Diffstat (limited to 'lib/sol2/examples/source/error_handler.cpp')
-rw-r--r-- | lib/sol2/examples/source/error_handler.cpp | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/lib/sol2/examples/source/error_handler.cpp b/lib/sol2/examples/source/error_handler.cpp new file mode 100644 index 0000000..6564676 --- /dev/null +++ b/lib/sol2/examples/source/error_handler.cpp @@ -0,0 +1,82 @@ +#define SOL_ALL_SAFETIES_ON 1
+#include <sol/sol.hpp>
+
+#include <iostream>
+
+int main () {
+
+ const auto& code = R"(
+ bark_power = 11;
+
+ function got_problems( error_msg )
+ return "got_problems handler: " .. error_msg
+ end
+
+ function woof ( bark_energy )
+ if bark_energy < 20 then
+ error("*whine*")
+ end
+ return (bark_energy * (bark_power / 4))
+ end
+
+ function woofers ( bark_energy )
+ if bark_energy < 10 then
+ error("*whine*")
+ end
+ return (bark_energy * (bark_power / 4))
+ end
+ )";
+
+ sol::state lua;
+ lua.open_libraries(sol::lib::base);
+
+ lua.script(code);
+
+ sol::protected_function problematic_woof = lua["woof"];
+ problematic_woof.error_handler = lua["got_problems"];
+
+ auto firstwoof = problematic_woof(20);
+ if ( firstwoof.valid() ) {
+ // Can work with contents
+ double numwoof = firstwoof;
+ std::cout << "Got value: " << numwoof << std::endl;
+ }
+ else{
+ // An error has occured
+ sol::error err = firstwoof;
+ std::string what = err.what();
+ std::cout << what << std::endl;
+ }
+
+ // errors, calls handler and then returns a string error from Lua at the top of the stack
+ auto secondwoof = problematic_woof(19);
+ if (secondwoof.valid()) {
+ // Call succeeded
+ double numwoof = secondwoof;
+ std::cout << "Got value: " << numwoof << std::endl;
+ }
+ else {
+ // Call failed
+ // Note that if the handler was successfully called, this will include
+ // the additional appended error message information of
+ // "got_problems handler: " ...
+ sol::error err = secondwoof;
+ std::string what = err.what();
+ std::cout << what << std::endl;
+ }
+
+ // can also use optional to tell things
+ sol::optional<double> maybevalue = problematic_woof(19);
+ if (maybevalue) {
+ // Have a value, use it
+ double numwoof = maybevalue.value();
+ std::cout << "Got value: " << numwoof << std::endl;
+ }
+ else {
+ std::cout << "No value!" << std::endl;
+ }
+
+ std::cout << std::endl;
+
+ return 0;
+}
|