From bd93547c8388d9df66e6d2250eb2e2b1c3992350 Mon Sep 17 00:00:00 2001 From: George Marques Date: Wed, 18 Nov 2020 10:35:16 -0300 Subject: [PATCH] Fix return type on builtin validated calls Before it was being set to the base type instead of the actual return type. --- core/variant/variant_call.cpp | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/core/variant/variant_call.cpp b/core/variant/variant_call.cpp index 49a8fac80a5..f6fe642493a 100644 --- a/core/variant/variant_call.cpp +++ b/core/variant/variant_call.cpp @@ -122,6 +122,31 @@ static _FORCE_INLINE_ void vc_ptrcall(void (T::*method)(P...) const, void *p_bas call_with_ptr_argsc(reinterpret_cast(p_base), method, p_args); } +template +static _FORCE_INLINE_ void vc_change_return_type(R (T::*method)(P...), Variant *v) { + TypeAdjust::adjust(v); +} + +template +static _FORCE_INLINE_ void vc_change_return_type(R (T::*method)(P...) const, Variant *v) { + TypeAdjust::adjust(v); +} + +template +static _FORCE_INLINE_ void vc_change_return_type(void (T::*method)(P...), Variant *v) { + VariantInternal::clear(v); +} + +template +static _FORCE_INLINE_ void vc_change_return_type(void (T::*method)(P...) const, Variant *v) { + VariantInternal::clear(v); +} + +template +static _FORCE_INLINE_ void vc_change_return_type(R (*method)(P...), Variant *v) { + TypeAdjust::adjust(v); +} + template static _FORCE_INLINE_ int vc_get_argument_count(R (T::*method)(P...)) { return sizeof...(P); @@ -258,7 +283,7 @@ static _FORCE_INLINE_ Variant::Type vc_get_base_type(void (T::*method)(P...) con vc_method_call(m_method_ptr, base, p_args, p_argcount, r_ret, p_defvals, r_error); \ } \ static void validated_call(Variant *base, const Variant **p_args, int p_argcount, Variant *r_ret) { \ - TypeAdjust::adjust(r_ret); \ + vc_change_return_type(m_method_ptr, r_ret); \ vc_validated_call(m_method_ptr, base, p_args, r_ret); \ } \ static void ptrcall(void *p_base, const void **p_args, void *r_ret, int p_argcount) { \ @@ -301,7 +326,7 @@ static _FORCE_INLINE_ void vc_ptrcall(R (*method)(T *, P...), void *p_base, cons call_with_variant_args_retc_static_helper_dv(VariantGetInternalPtr::get_ptr(base), m_method_ptr, p_args, p_argcount, r_ret, p_defvals, r_error); \ } \ static void validated_call(Variant *base, const Variant **p_args, int p_argcount, Variant *r_ret) { \ - TypeAdjust::adjust(r_ret); \ + vc_change_return_type(m_method_ptr, r_ret); \ call_with_validated_variant_args_static_retc(base, m_method_ptr, p_args, r_ret); \ } \ static void ptrcall(void *p_base, const void **p_args, void *r_ret, int p_argcount) { \