From be64b0dc371daf8109a0f6c22a2196ad4ea2b4ce Mon Sep 17 00:00:00 2001 From: David Snopek Date: Tue, 9 Apr 2024 13:40:33 -0500 Subject: [PATCH] Fix GDExtension hot reload for classes not created via `ClassDB::instantiate()` --- core/object/class_db.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/core/object/class_db.cpp b/core/object/class_db.cpp index bf1bd0de93a..a20a110d218 100644 --- a/core/object/class_db.cpp +++ b/core/object/class_db.cpp @@ -366,13 +366,7 @@ Object *ClassDB::instantiate(const StringName &p_class) { } #endif if (ti->gdextension && ti->gdextension->create_instance) { - Object *obj = (Object *)ti->gdextension->create_instance(ti->gdextension->class_userdata); -#ifdef TOOLS_ENABLED - if (ti->gdextension->track_instance) { - ti->gdextension->track_instance(ti->gdextension->tracking_userdata, obj); - } -#endif - return obj; + return (Object *)ti->gdextension->create_instance(ti->gdextension->class_userdata); } else { return ti->creation_func(); } @@ -396,6 +390,12 @@ void ClassDB::set_object_extension_instance(Object *p_object, const StringName & p_object->_extension = ti->gdextension; p_object->_extension_instance = p_instance; + +#ifdef TOOLS_ENABLED + if (p_object->_extension->track_instance) { + p_object->_extension->track_instance(p_object->_extension->tracking_userdata, p_object); + } +#endif } bool ClassDB::can_instantiate(const StringName &p_class) {