From dc2493e7525bb7633f697ef10f72b72b46222249 Mon Sep 17 00:00:00 2001 From: Andy Belle-Isle Date: Fri, 30 Aug 2019 00:45:36 -0400 Subject: Forget what I said, I just need to change git attributes to mark for vendor --- .../source/customization_convert_on_get.cpp | 54 ++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 lib/sol2/examples/source/customization_convert_on_get.cpp (limited to 'lib/sol2/examples/source/customization_convert_on_get.cpp') diff --git a/lib/sol2/examples/source/customization_convert_on_get.cpp b/lib/sol2/examples/source/customization_convert_on_get.cpp new file mode 100644 index 0000000..da2b5da --- /dev/null +++ b/lib/sol2/examples/source/customization_convert_on_get.cpp @@ -0,0 +1,54 @@ +#define SOL_ALL_SAFETIES_ON 1 +#include + +#include +#include +#include "assert.hpp" + +struct number_shim { + double num = 0; +}; + +template +bool sol_lua_check(sol::types, lua_State* L, int index, Handler&& handler, sol::stack::record& tracking) { + // check_usertype is a backdoor for directly checking sol3 usertypes + if (!sol::stack::check_usertype(L, index) + && !sol::stack::check(L, index)) { + handler(L, index, sol::type_of(L, index), sol::type::userdata, "expected a number_shim or a number"); + return false; + } + tracking.use(1); + return true; +} + +number_shim sol_lua_get(sol::types, lua_State* L, int index, sol::stack::record& tracking) { + if (sol::stack::check_usertype(L, index)) { + number_shim& ns = sol::stack::get_usertype(L, index, tracking); + return ns; + } + number_shim ns{}; + ns.num = sol::stack::get(L, index, tracking); + return ns; +} + +int main() { + sol::state lua; + + // Create a pass-through style of function + lua.safe_script("function f ( a ) return a end"); + lua.set_function("g", [](double a) { + number_shim ns; + ns.num = a; + return ns; + }); + + lua.script("vf = f(25) vg = g(35)"); + + number_shim thingsf = lua["vf"]; + number_shim thingsg = lua["vg"]; + + c_assert(thingsf.num == 25); + c_assert(thingsg.num == 35); + + return 0; +} -- cgit v1.2.3