summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/extension/gdextension_interface.cpp52
-rw-r--r--core/extension/gdextension_interface.h4
-rw-r--r--core/math/math_funcs.h11
-rw-r--r--core/object/object.cpp2
-rw-r--r--core/object/script_language_extension.h4
-rw-r--r--core/variant/callable_bind.cpp4
-rw-r--r--core/variant/variant_call.cpp14
-rw-r--r--core/variant/variant_utility.cpp16
-rw-r--r--core/variant/variant_utility.h3
9 files changed, 70 insertions, 40 deletions
diff --git a/core/extension/gdextension_interface.cpp b/core/extension/gdextension_interface.cpp
index 24517d71e4..b6dfec33ed 100644
--- a/core/extension/gdextension_interface.cpp
+++ b/core/extension/gdextension_interface.cpp
@@ -1043,35 +1043,35 @@ static void gdextension_ref_set_object(GDExtensionRefPtr p_ref, GDExtensionObjec
#ifndef DISABLE_DEPRECATED
static GDExtensionScriptInstancePtr gdextension_script_instance_create(const GDExtensionScriptInstanceInfo *p_info, GDExtensionScriptInstanceDataPtr p_instance_data) {
- const GDExtensionScriptInstanceInfo2 info_2 = {
- p_info->set_func,
- p_info->get_func,
- p_info->get_property_list_func,
- p_info->free_property_list_func,
- p_info->property_can_revert_func,
- p_info->property_get_revert_func,
- p_info->get_owner_func,
- p_info->get_property_state_func,
- p_info->get_method_list_func,
- p_info->free_method_list_func,
- p_info->get_property_type_func,
- p_info->has_method_func,
- p_info->call_func,
- nullptr, // notification_func.
- p_info->to_string_func,
- p_info->refcount_incremented_func,
- p_info->refcount_decremented_func,
- p_info->get_script_func,
- p_info->is_placeholder_func,
- p_info->set_fallback_func,
- p_info->get_fallback_func,
- p_info->get_language_func,
- p_info->free_func,
- };
+ GDExtensionScriptInstanceInfo2 *info_2 = memnew(GDExtensionScriptInstanceInfo2);
+ info_2->set_func = p_info->set_func;
+ info_2->get_func = p_info->get_func;
+ info_2->get_property_list_func = p_info->get_property_list_func;
+ info_2->free_property_list_func = p_info->free_property_list_func;
+ info_2->property_can_revert_func = p_info->property_can_revert_func;
+ info_2->property_get_revert_func = p_info->property_get_revert_func;
+ info_2->get_owner_func = p_info->get_owner_func;
+ info_2->get_property_state_func = p_info->get_property_state_func;
+ info_2->get_method_list_func = p_info->get_method_list_func;
+ info_2->free_method_list_func = p_info->free_method_list_func;
+ info_2->get_property_type_func = p_info->get_property_type_func;
+ info_2->has_method_func = p_info->has_method_func;
+ info_2->call_func = p_info->call_func;
+ info_2->notification_func = nullptr;
+ info_2->to_string_func = p_info->to_string_func;
+ info_2->refcount_incremented_func = p_info->refcount_incremented_func;
+ info_2->refcount_decremented_func = p_info->refcount_decremented_func;
+ info_2->get_script_func = p_info->get_script_func;
+ info_2->is_placeholder_func = p_info->is_placeholder_func;
+ info_2->set_fallback_func = p_info->set_fallback_func;
+ info_2->get_fallback_func = p_info->get_fallback_func;
+ info_2->get_language_func = p_info->get_language_func;
+ info_2->free_func = p_info->free_func;
ScriptInstanceExtension *script_instance_extension = memnew(ScriptInstanceExtension);
script_instance_extension->instance = p_instance_data;
- script_instance_extension->native_info = &info_2;
+ script_instance_extension->native_info = info_2;
+ script_instance_extension->free_native_info = true;
script_instance_extension->deprecated_native_info.notification_func = p_info->notification_func;
return reinterpret_cast<GDExtensionScriptInstancePtr>(script_instance_extension);
}
diff --git a/core/extension/gdextension_interface.h b/core/extension/gdextension_interface.h
index e719d7337b..102220c0fc 100644
--- a/core/extension/gdextension_interface.h
+++ b/core/extension/gdextension_interface.h
@@ -259,7 +259,7 @@ typedef void (*GDExtensionClassFreePropertyList)(GDExtensionClassInstancePtr p_i
typedef GDExtensionBool (*GDExtensionClassPropertyCanRevert)(GDExtensionClassInstancePtr p_instance, GDExtensionConstStringNamePtr p_name);
typedef GDExtensionBool (*GDExtensionClassPropertyGetRevert)(GDExtensionClassInstancePtr p_instance, GDExtensionConstStringNamePtr p_name, GDExtensionVariantPtr r_ret);
typedef void (*GDExtensionClassNotification)(GDExtensionClassInstancePtr p_instance, int32_t p_what); // Deprecated. Use GDExtensionClassNotification2 instead.
-typedef void (*GDExtensionClassNotification2)(GDExtensionClassInstancePtr p_instance, int32_t p_what, bool p_reversed);
+typedef void (*GDExtensionClassNotification2)(GDExtensionClassInstancePtr p_instance, int32_t p_what, GDExtensionBool p_reversed);
typedef void (*GDExtensionClassToString)(GDExtensionClassInstancePtr p_instance, GDExtensionBool *r_is_valid, GDExtensionStringPtr p_out);
typedef void (*GDExtensionClassReference)(GDExtensionClassInstancePtr p_instance);
typedef void (*GDExtensionClassUnreference)(GDExtensionClassInstancePtr p_instance);
@@ -388,7 +388,7 @@ typedef GDExtensionBool (*GDExtensionScriptInstanceHasMethod)(GDExtensionScriptI
typedef void (*GDExtensionScriptInstanceCall)(GDExtensionScriptInstanceDataPtr p_self, GDExtensionConstStringNamePtr p_method, const GDExtensionConstVariantPtr *p_args, GDExtensionInt p_argument_count, GDExtensionVariantPtr r_return, GDExtensionCallError *r_error);
typedef void (*GDExtensionScriptInstanceNotification)(GDExtensionScriptInstanceDataPtr p_instance, int32_t p_what); // Deprecated. Use GDExtensionScriptInstanceNotification2 instead.
-typedef void (*GDExtensionScriptInstanceNotification2)(GDExtensionScriptInstanceDataPtr p_instance, int32_t p_what, bool p_reversed);
+typedef void (*GDExtensionScriptInstanceNotification2)(GDExtensionScriptInstanceDataPtr p_instance, int32_t p_what, GDExtensionBool p_reversed);
typedef void (*GDExtensionScriptInstanceToString)(GDExtensionScriptInstanceDataPtr p_instance, GDExtensionBool *r_is_valid, GDExtensionStringPtr r_out);
typedef void (*GDExtensionScriptInstanceRefCountIncremented)(GDExtensionScriptInstanceDataPtr p_instance);
diff --git a/core/math/math_funcs.h b/core/math/math_funcs.h
index f96d3a909f..934c75b5d3 100644
--- a/core/math/math_funcs.h
+++ b/core/math/math_funcs.h
@@ -88,6 +88,17 @@ public:
static _ALWAYS_INLINE_ double atan2(double p_y, double p_x) { return ::atan2(p_y, p_x); }
static _ALWAYS_INLINE_ float atan2(float p_y, float p_x) { return ::atan2f(p_y, p_x); }
+ static _ALWAYS_INLINE_ double asinh(double p_x) { return ::asinh(p_x); }
+ static _ALWAYS_INLINE_ float asinh(float p_x) { return ::asinhf(p_x); }
+
+ // Always does clamping so always safe to use.
+ static _ALWAYS_INLINE_ double acosh(double p_x) { return p_x < 1 ? 0 : ::acosh(p_x); }
+ static _ALWAYS_INLINE_ float acosh(float p_x) { return p_x < 1 ? 0 : ::acoshf(p_x); }
+
+ // Always does clamping so always safe to use.
+ static _ALWAYS_INLINE_ double atanh(double p_x) { return p_x <= -1 ? -INFINITY : (p_x >= 1 ? INFINITY : ::atanh(p_x)); }
+ static _ALWAYS_INLINE_ float atanh(float p_x) { return p_x <= -1 ? -INFINITY : (p_x >= 1 ? INFINITY : ::atanhf(p_x)); }
+
static _ALWAYS_INLINE_ double sqrt(double p_x) { return ::sqrt(p_x); }
static _ALWAYS_INLINE_ float sqrt(float p_x) { return ::sqrtf(p_x); }
diff --git a/core/object/object.cpp b/core/object/object.cpp
index da8a30e61e..0a0953f7dc 100644
--- a/core/object/object.cpp
+++ b/core/object/object.cpp
@@ -809,7 +809,7 @@ void Object::notification(int p_notification, bool p_reversed) {
if (_extension) {
if (_extension->notification2) {
- _extension->notification2(_extension_instance, p_notification, p_reversed);
+ _extension->notification2(_extension_instance, p_notification, static_cast<GDExtensionBool>(p_reversed));
#ifndef DISABLE_DEPRECATED
} else if (_extension->notification) {
_extension->notification(_extension_instance, p_notification);
diff --git a/core/object/script_language_extension.h b/core/object/script_language_extension.h
index eca208a2bd..bf5ad3c107 100644
--- a/core/object/script_language_extension.h
+++ b/core/object/script_language_extension.h
@@ -631,6 +631,7 @@ VARIANT_ENUM_CAST(ScriptLanguageExtension::CodeCompletionLocation)
class ScriptInstanceExtension : public ScriptInstance {
public:
const GDExtensionScriptInstanceInfo2 *native_info;
+ bool free_native_info = false;
struct {
GDExtensionClassNotification notification_func;
} deprecated_native_info;
@@ -831,6 +832,9 @@ public:
if (native_info->free_func) {
native_info->free_func(instance);
}
+ if (free_native_info) {
+ memfree(const_cast<GDExtensionScriptInstanceInfo2 *>(native_info));
+ }
}
#if defined(__GNUC__) && !defined(__clang__)
diff --git a/core/variant/callable_bind.cpp b/core/variant/callable_bind.cpp
index e493e50467..a5629d5d39 100644
--- a/core/variant/callable_bind.cpp
+++ b/core/variant/callable_bind.cpp
@@ -88,7 +88,7 @@ ObjectID CallableCustomBind::get_object() const {
}
const Callable *CallableCustomBind::get_base_comparator() const {
- return &callable;
+ return callable.get_base_comparator();
}
int CallableCustomBind::get_bound_arguments_count() const {
@@ -222,7 +222,7 @@ ObjectID CallableCustomUnbind::get_object() const {
}
const Callable *CallableCustomUnbind::get_base_comparator() const {
- return &callable;
+ return callable.get_base_comparator();
}
int CallableCustomUnbind::get_bound_arguments_count() const {
diff --git a/core/variant/variant_call.cpp b/core/variant/variant_call.cpp
index ccf9b82022..5a405a7080 100644
--- a/core/variant/variant_call.cpp
+++ b/core/variant/variant_call.cpp
@@ -561,8 +561,8 @@ static _FORCE_INLINE_ void vc_ptrcall(void (*method)(T *, P...), void *p_base, c
} \
static void ptrcall(void *p_base, const void **p_args, void *r_ret, int p_argcount) { \
LocalVector<Variant> vars; \
- vars.resize(p_argcount); \
LocalVector<const Variant *> vars_ptrs; \
+ vars.resize(p_argcount); \
vars_ptrs.resize(p_argcount); \
for (int i = 0; i < p_argcount; i++) { \
vars[i] = PtrToArg<Variant>::convert(p_args[i]); \
@@ -571,7 +571,7 @@ static _FORCE_INLINE_ void vc_ptrcall(void (*method)(T *, P...), void *p_base, c
Variant base = PtrToArg<m_class>::convert(p_base); \
Variant ret; \
Callable::CallError ce; \
- m_method_ptr(&base, (const Variant **)&vars_ptrs[0], p_argcount, ret, ce); \
+ m_method_ptr(&base, vars_ptrs.ptr(), p_argcount, ret, ce); \
if (m_has_return) { \
m_return_type r = ret; \
PtrToArg<m_return_type>::encode(ret, r_ret); \
@@ -617,8 +617,8 @@ static _FORCE_INLINE_ void vc_ptrcall(void (*method)(T *, P...), void *p_base, c
} \
static void ptrcall(void *p_base, const void **p_args, void *r_ret, int p_argcount) { \
LocalVector<Variant> vars; \
- vars.resize(p_argcount); \
LocalVector<const Variant *> vars_ptrs; \
+ vars.resize(p_argcount); \
vars_ptrs.resize(p_argcount); \
for (int i = 0; i < p_argcount; i++) { \
vars[i] = PtrToArg<Variant>::convert(p_args[i]); \
@@ -627,7 +627,7 @@ static _FORCE_INLINE_ void vc_ptrcall(void (*method)(T *, P...), void *p_base, c
Variant base = PtrToArg<m_class>::convert(p_base); \
Variant ret; \
Callable::CallError ce; \
- m_method_ptr(&base, (const Variant **)&vars_ptrs[0], p_argcount, ret, ce); \
+ m_method_ptr(&base, vars_ptrs.ptr(), p_argcount, ret, ce); \
} \
static int get_argument_count() { \
return 1; \
@@ -1132,11 +1132,7 @@ static void register_builtin_method(const Vector<String> &p_argnames, const Vect
imi.call = T::call;
imi.validated_call = T::validated_call;
- if (T::is_vararg()) {
- imi.ptrcall = nullptr;
- } else {
- imi.ptrcall = T::ptrcall;
- }
+ imi.ptrcall = T::ptrcall;
imi.default_arguments = p_def_args;
imi.argument_names = p_argnames;
diff --git a/core/variant/variant_utility.cpp b/core/variant/variant_utility.cpp
index 4f6bcb58b3..b51df89bec 100644
--- a/core/variant/variant_utility.cpp
+++ b/core/variant/variant_utility.cpp
@@ -81,6 +81,18 @@ double VariantUtilityFunctions::atan2(double y, double x) {
return Math::atan2(y, x);
}
+double VariantUtilityFunctions::asinh(double arg) {
+ return Math::asinh(arg);
+}
+
+double VariantUtilityFunctions::acosh(double arg) {
+ return Math::acosh(arg);
+}
+
+double VariantUtilityFunctions::atanh(double arg) {
+ return Math::atanh(arg);
+}
+
double VariantUtilityFunctions::sqrt(double x) {
return Math::sqrt(x);
}
@@ -1502,6 +1514,10 @@ void Variant::_register_variant_utility_functions() {
FUNCBINDR(atan2, sarray("y", "x"), Variant::UTILITY_FUNC_TYPE_MATH);
+ FUNCBINDR(asinh, sarray("x"), Variant::UTILITY_FUNC_TYPE_MATH);
+ FUNCBINDR(acosh, sarray("x"), Variant::UTILITY_FUNC_TYPE_MATH);
+ FUNCBINDR(atanh, sarray("x"), Variant::UTILITY_FUNC_TYPE_MATH);
+
FUNCBINDR(sqrt, sarray("x"), Variant::UTILITY_FUNC_TYPE_MATH);
FUNCBINDR(fmod, sarray("x", "y"), Variant::UTILITY_FUNC_TYPE_MATH);
FUNCBINDR(fposmod, sarray("x", "y"), Variant::UTILITY_FUNC_TYPE_MATH);
diff --git a/core/variant/variant_utility.h b/core/variant/variant_utility.h
index 78f66987cb..66883fb140 100644
--- a/core/variant/variant_utility.h
+++ b/core/variant/variant_utility.h
@@ -45,6 +45,9 @@ struct VariantUtilityFunctions {
static double acos(double arg);
static double atan(double arg);
static double atan2(double y, double x);
+ static double asinh(double arg);
+ static double acosh(double arg);
+ static double atanh(double arg);
static double sqrt(double x);
static double fmod(double b, double r);
static double fposmod(double b, double r);