2019-05-22 07:17:31 +08:00
|
|
|
#define SOL_ALL_SAFETIES_ON 1
|
2018-09-28 13:27:38 +08:00
|
|
|
#include <sol/sol.hpp>
|
2017-12-11 04:56:49 +08:00
|
|
|
|
|
|
|
#include <iostream>
|
|
|
|
#include <iomanip>
|
2017-12-26 12:27:22 +08:00
|
|
|
#include "assert.hpp"
|
2017-12-11 04:56:49 +08:00
|
|
|
|
|
|
|
struct number_shim {
|
|
|
|
double num = 0;
|
|
|
|
};
|
|
|
|
|
2018-12-21 14:07:05 +08:00
|
|
|
template <typename Handler>
|
|
|
|
bool sol_lua_check(sol::types<number_shim>, lua_State* L, int index, Handler&& handler, sol::stack::record& tracking) {
|
2019-05-22 07:17:31 +08:00
|
|
|
// check_usertype is a backdoor for directly checking sol3 usertypes
|
2018-12-21 14:07:05 +08:00
|
|
|
if (!sol::stack::check_usertype<number_shim>(L, index)
|
|
|
|
&& !sol::stack::check<double>(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;
|
|
|
|
}
|
2017-12-11 04:56:49 +08:00
|
|
|
|
2018-12-21 14:07:05 +08:00
|
|
|
number_shim sol_lua_get(sol::types<number_shim>, lua_State* L, int index, sol::stack::record& tracking) {
|
|
|
|
if (sol::stack::check_usertype<number_shim>(L, index)) {
|
|
|
|
number_shim& ns = sol::stack::get_usertype<number_shim>(L, index, tracking);
|
|
|
|
return ns;
|
|
|
|
}
|
|
|
|
number_shim ns{};
|
|
|
|
ns.num = sol::stack::get<double>(L, index, tracking);
|
|
|
|
return ns;
|
|
|
|
}
|
2017-12-11 04:56:49 +08:00
|
|
|
|
|
|
|
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"];
|
|
|
|
|
2017-12-26 12:27:22 +08:00
|
|
|
c_assert(thingsf.num == 25);
|
|
|
|
c_assert(thingsg.num == 35);
|
2017-12-11 04:56:49 +08:00
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|