diff options
author | David Snopek <dsnopek@gmail.com> | 2024-03-01 09:56:19 -0600 |
---|---|---|
committer | David Snopek <dsnopek@gmail.com> | 2024-03-02 10:13:37 -0600 |
commit | 0badf0765786dc14a8b03e73789f7ad259bcf17a (patch) | |
tree | f34cbffefde4b6522a26d5170a61920702386f18 /core/object/script_language_extension.h | |
parent | df78c0636d79c9545a283e0e2a926d623998cc27 (diff) | |
download | redot-engine-0badf0765786dc14a8b03e73789f7ad259bcf17a.tar.gz |
GDExtension: Pass count when freeing method and property lists for script instances
Diffstat (limited to 'core/object/script_language_extension.h')
-rw-r--r-- | core/object/script_language_extension.h | 35 |
1 files changed, 27 insertions, 8 deletions
diff --git a/core/object/script_language_extension.h b/core/object/script_language_extension.h index b7222a159a..aa0788b8bf 100644 --- a/core/object/script_language_extension.h +++ b/core/object/script_language_extension.h @@ -655,11 +655,17 @@ VARIANT_ENUM_CAST(ScriptLanguageExtension::CodeCompletionLocation) class ScriptInstanceExtension : public ScriptInstance { public: - const GDExtensionScriptInstanceInfo2 *native_info; + const GDExtensionScriptInstanceInfo3 *native_info; + +#ifndef DISABLE_DEPRECATED bool free_native_info = false; - struct { + struct DeprecatedNativeInfo { GDExtensionScriptInstanceNotification notification_func = nullptr; - } deprecated_native_info; + GDExtensionScriptInstanceFreePropertyList free_property_list_func = nullptr; + GDExtensionScriptInstanceFreeMethodList free_method_list_func = nullptr; + }; + DeprecatedNativeInfo *deprecated_native_info = nullptr; +#endif // DISABLE_DEPRECATED GDExtensionScriptInstanceDataPtr instance = nullptr; @@ -706,7 +712,11 @@ public: p_list->push_back(PropertyInfo(pinfo[i])); } if (native_info->free_property_list_func) { - native_info->free_property_list_func(instance, pinfo); + native_info->free_property_list_func(instance, pinfo, pcount); +#ifndef DISABLE_DEPRECATED + } else if (deprecated_native_info && deprecated_native_info->free_property_list_func) { + deprecated_native_info->free_property_list_func(instance, pinfo); +#endif // DISABLE_DEPRECATED } } } @@ -781,7 +791,11 @@ public: p_list->push_back(MethodInfo(minfo[i])); } if (native_info->free_method_list_func) { - native_info->free_method_list_func(instance, minfo); + native_info->free_method_list_func(instance, minfo, mcount); +#ifndef DISABLE_DEPRECATED + } else if (deprecated_native_info && deprecated_native_info->free_method_list_func) { + deprecated_native_info->free_method_list_func(instance, minfo); +#endif // DISABLE_DEPRECATED } } } @@ -808,8 +822,8 @@ public: if (native_info->notification_func) { native_info->notification_func(instance, p_notification, p_reversed); #ifndef DISABLE_DEPRECATED - } else if (deprecated_native_info.notification_func) { - deprecated_native_info.notification_func(instance, p_notification); + } else if (deprecated_native_info && deprecated_native_info->notification_func) { + deprecated_native_info->notification_func(instance, p_notification); #endif // DISABLE_DEPRECATED } } @@ -885,9 +899,14 @@ public: if (native_info->free_func) { native_info->free_func(instance); } +#ifndef DISABLE_DEPRECATED if (free_native_info) { - memfree(const_cast<GDExtensionScriptInstanceInfo2 *>(native_info)); + memfree(const_cast<GDExtensionScriptInstanceInfo3 *>(native_info)); } + if (deprecated_native_info) { + memfree(deprecated_native_info); + } +#endif // DISABLE_DEPRECATED } #if defined(__GNUC__) && !defined(__clang__) |