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/stack_aligned_function.cpp | |
parent | e9758416b18b27a65337c28d9641afc0ee89b34b (diff) | |
parent | 7a46fa2dd3dad3f038bf8e7339bc67abca428ae6 (diff) |
Started creating scripting library/namespace and added sol2 for interfacing
Diffstat (limited to 'lib/sol2/examples/source/stack_aligned_function.cpp')
-rw-r--r-- | lib/sol2/examples/source/stack_aligned_function.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/lib/sol2/examples/source/stack_aligned_function.cpp b/lib/sol2/examples/source/stack_aligned_function.cpp new file mode 100644 index 0000000..b2a258a --- /dev/null +++ b/lib/sol2/examples/source/stack_aligned_function.cpp @@ -0,0 +1,34 @@ +#define SOL_ALL_SAFETIES_ON 1 +#include <sol/sol.hpp> + +#include "assert.hpp" + +int main(int, char*[]) { + sol::state lua; + lua.script("function func (a, b) return (a + b) * 2 end"); + + sol::reference func_ref = lua["func"]; + + // for some reason, you need to use the low-level API + func_ref.push(); // function on stack now + + // maybe this is in a lua_CFunction you bind, + // or maybe you're trying to work with a pre-existing system + // maybe you've used a custom lua_load call, or you're working + // with state_view's load(lua_Reader, ...) call... + // here's a little bit of how you can work with the stack + lua_State* L = lua.lua_state(); + sol::stack_aligned_function func(L, -1); + lua_pushinteger(L, 5); // argument 1, using plain API + lua_pushinteger(L, 6); // argument 2 + + // take 2 arguments from the top, + // and use "stack_aligned_function" to call + int result = func(sol::stack_count(2)); + + // make sure everything is clean + c_assert(result == 22); + c_assert(lua.stack_top() == 0); // stack is empty/balanced + + return 0; +} |