diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2024-03-04 13:33:45 +0100 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2024-03-04 13:33:45 +0100 |
commit | 50ca19028647b1f3f064452ccd7c22cf7e3a8315 (patch) | |
tree | 13b438d60d6b4803775ee5bea42a96c345d9d8d2 /core/object/script_language_extension.h | |
parent | 3be5d9b01a3f74eb4f8e028d7dff63b000d82a5c (diff) | |
parent | 0badf0765786dc14a8b03e73789f7ad259bcf17a (diff) | |
download | redot-engine-50ca19028647b1f3f064452ccd7c22cf7e3a8315.tar.gz |
Merge pull request #89055 from dsnopek/gdextension-script-free-lists
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__) |