diff options
Diffstat (limited to 'core/object/object.h')
-rw-r--r-- | core/object/object.h | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/core/object/object.h b/core/object/object.h index 40ce49290e..60dc031d4d 100644 --- a/core/object/object.h +++ b/core/object/object.h @@ -313,6 +313,7 @@ struct ObjectGDExtension { StringName parent_class_name; StringName class_name; bool editor_class = false; + bool reloadable = false; bool is_virtual = false; bool is_abstract = false; bool is_exposed = true; @@ -349,6 +350,13 @@ struct ObjectGDExtension { GDExtensionClassGetVirtual get_virtual; GDExtensionClassGetVirtualCallData get_virtual_call_data; GDExtensionClassCallVirtualWithData call_virtual_with_data; + GDExtensionClassRecreateInstance recreate_instance; + +#ifdef TOOLS_ENABLED + void *tracking_userdata = nullptr; + void (*track_instance)(void *p_userdata, void *p_instance); + void (*untrack_instance)(void *p_userdata, void *p_instance); +#endif }; #define GDVIRTUAL_CALL(m_name, ...) _gdvirtual_##m_name##_call<false>(__VA_ARGS__) @@ -750,6 +758,16 @@ protected: bool _disconnect(const StringName &p_signal, const Callable &p_callable, bool p_force = false); +#ifdef TOOLS_ENABLED + struct VirtualMethodTracker { + void **method; + bool *initialized; + VirtualMethodTracker *next; + }; + + mutable VirtualMethodTracker *virtual_method_list = nullptr; +#endif + public: // Should be protected, but bug in clang++. static void initialize_class(); _FORCE_INLINE_ static void register_custom_data_to_otdb() {} @@ -781,7 +799,8 @@ public: enum { NOTIFICATION_POSTINITIALIZE = 0, - NOTIFICATION_PREDELETE = 1 + NOTIFICATION_PREDELETE = 1, + NOTIFICATION_EXTENSION_RELOADED = 2, }; /* TYPE API */ @@ -952,6 +971,12 @@ public: void set_instance_binding(void *p_token, void *p_binding, const GDExtensionInstanceBindingCallbacks *p_callbacks); bool has_instance_binding(void *p_token); +#ifdef TOOLS_ENABLED + void free_instance_binding(void *p_token); + void clear_internal_extension(); + void reset_internal_extension(ObjectGDExtension *p_extension); +#endif + void clear_internal_resource_paths(); _ALWAYS_INLINE_ bool is_ref_counted() const { return type_is_reference; } |