From e4aaf9fbc67ea4210554374c0126c4fe7c9a1079 Mon Sep 17 00:00:00 2001 From: David Snopek Date: Tue, 12 Nov 2024 10:46:44 -0600 Subject: [PATCH] GDExtension: Check if class without recreate callback is creatable, before marking whole extension as unreloadable --- core/extension/gdextension.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/core/extension/gdextension.cpp b/core/extension/gdextension.cpp index d6ba7313b9d..d23bdbdcbb3 100644 --- a/core/extension/gdextension.cpp +++ b/core/extension/gdextension.cpp @@ -410,8 +410,16 @@ void GDExtension::_register_extension_class_internal(GDExtensionClassLibraryPtr } if (self->reloadable && p_extension_funcs->recreate_instance_func == nullptr) { - ERR_PRINT(vformat("Extension marked as reloadable, but attempted to register class '%s' which doesn't support reloading. Perhaps your language binding don't support it? Reloading disabled for this extension.", class_name)); - self->reloadable = false; + bool can_create_class = (bool)p_extension_funcs->create_instance_func; +#ifndef DISABLE_DEPRECATED + if (!can_create_class && p_deprecated_funcs) { + can_create_class = (bool)p_deprecated_funcs->create_instance_func; + } +#endif + if (can_create_class) { + ERR_PRINT(vformat("Extension marked as reloadable, but attempted to register class '%s' which doesn't support reloading. Perhaps your language binding don't support it? Reloading disabled for this extension.", class_name)); + self->reloadable = false; + } } extension->gdextension.library = self;