summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/sol2/sol/function.hpp
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/sol2/sol/function.hpp')
-rw-r--r--3rdparty/sol2/sol/function.hpp10
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);