diff options
author | Andy Belle-Isle <drumsetmonkey@gmail.com> | 2019-08-30 00:45:36 -0400 |
---|---|---|
committer | Andy Belle-Isle <drumsetmonkey@gmail.com> | 2019-08-30 00:45:36 -0400 |
commit | dc2493e7525bb7633f697ef10f72b72b46222249 (patch) | |
tree | 9816755219e65d3f47fdce81c78f3736a7ddb8ab /lib/sol2/examples/source/protected_functions.cpp | |
parent | 9d2b31797d0cfd130802b69261df2cd402e39b49 (diff) |
Forget what I said, I just need to change git attributes to mark for vendor
Diffstat (limited to 'lib/sol2/examples/source/protected_functions.cpp')
-rw-r--r-- | lib/sol2/examples/source/protected_functions.cpp | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/lib/sol2/examples/source/protected_functions.cpp b/lib/sol2/examples/source/protected_functions.cpp new file mode 100644 index 0000000..7e217fc --- /dev/null +++ b/lib/sol2/examples/source/protected_functions.cpp @@ -0,0 +1,47 @@ +#define SOL_ALL_SAFETIES_ON 1 +#include <sol/sol.hpp> + +#include <iostream> + +int main() { + std::cout << "=== protected_functions ===" << std::endl; + + sol::state lua; + lua.open_libraries(sol::lib::base); + + // A complicated function which can error out + // We define both in terms of Lua code + + lua.script(R"( + function handler (message) + return "Handled this message: " .. message + end + + function f (a) + if a < 0 then + error("negative number detected") + end + return a + 5 + end + )"); + + // Get a protected function out of Lua + sol::protected_function f(lua["f"], lua["handler"]); + + sol::protected_function_result result = f(-500); + if (result.valid()) { + // Call succeeded + int x = result; + std::cout << "call succeeded, result is " << x << std::endl; + } + else { + // Call failed + sol::error err = result; + std::string what = err.what(); + std::cout << "call failed, sol::error::what() is " << what << std::endl; + // 'what' Should read + // "Handled this message: negative number detected" + } + + std::cout << std::endl; +} |