diff options
Diffstat (limited to '3rdparty/sol2/sol/function.hpp')
-rw-r--r-- | 3rdparty/sol2/sol/function.hpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/3rdparty/sol2/sol/function.hpp b/3rdparty/sol2/sol/function.hpp index 1ec9afb1104..57b2e0accd8 100644 --- a/3rdparty/sol2/sol/function.hpp +++ b/3rdparty/sol2/sol/function.hpp @@ -81,11 +81,19 @@ namespace sol { basic_function& operator=(basic_function&&) = default; basic_function(const stack_reference& r) : basic_function(r.lua_state(), r.stack_index()) {} basic_function(stack_reference&& r) : basic_function(r.lua_state(), r.stack_index()) {} + template <typename T, meta::enable<meta::neg<std::is_integral<meta::unqualified_t<T>>>, meta::neg<std::is_same<T, ref_index>>> = meta::enabler> + basic_function(lua_State* L, T&& r) : basic_function(L, sol::ref_index(r.registry_index())) {} basic_function(lua_State* L, int index = -1) : base_t(L, index) { #ifdef SOL_CHECK_ARGUMENTS stack::check<basic_function>(L, index, type_panic); #endif // Safety } + basic_function(lua_State* L, ref_index index) : base_t(L, index) { +#ifdef SOL_CHECK_ARGUMENTS + auto pp = stack::push_pop(*this); + stack::check<basic_function>(L, -1, type_panic); +#endif // Safety + } template<typename... Args> function_result operator()(Args&&... args) const { @@ -139,7 +147,7 @@ namespace sol { tracking.last = 1; tracking.used += 1; type t = type_of(L, index); - if (t == type::none || t == type::nil) { + if (t == type::none || t == type::lua_nil) { return nullptr; } return get_std_func(return_types(), args_lists(), L, index); |