summaryrefslogtreecommitdiffstats
path: root/core/object/script_language_extension.h
diff options
context:
space:
mode:
authorDavid Snopek <dsnopek@gmail.com>2024-03-01 09:56:19 -0600
committerDavid Snopek <dsnopek@gmail.com>2024-03-02 10:13:37 -0600
commit0badf0765786dc14a8b03e73789f7ad259bcf17a (patch)
treef34cbffefde4b6522a26d5170a61920702386f18 /core/object/script_language_extension.h
parentdf78c0636d79c9545a283e0e2a926d623998cc27 (diff)
downloadredot-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.h35
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__)