diff options
Diffstat (limited to 'core/object/make_virtuals.py')
-rw-r--r-- | core/object/make_virtuals.py | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/core/object/make_virtuals.py b/core/object/make_virtuals.py index c2e69dc8e2..0f3cf3916a 100644 --- a/core/object/make_virtuals.py +++ b/core/object/make_virtuals.py @@ -22,6 +22,7 @@ _FORCE_INLINE_ bool _gdvirtual_##m_name##_call($CALLARGS) $CONST { \\ } else if (_get_extension()->get_virtual) {\\ _gdvirtual_##m_name = (void *)_get_extension()->get_virtual(_get_extension()->class_userdata, &_gdvirtual_##m_name##_sn);\\ }\\ + GDVIRTUAL_TRACK(_gdvirtual_##m_name, _gdvirtual_##m_name##_initialized); \\ _gdvirtual_##m_name##_initialized = true;\\ }\\ if (_gdvirtual_##m_name) {\\ @@ -56,6 +57,7 @@ _FORCE_INLINE_ bool _gdvirtual_##m_name##_overridden() const { \\ } else if (_get_extension()->get_virtual) {\\ _gdvirtual_##m_name = (void *)_get_extension()->get_virtual(_get_extension()->class_userdata, &_gdvirtual_##m_name##_sn);\\ }\\ + GDVIRTUAL_TRACK(_gdvirtual_##m_name, _gdvirtual_##m_name##_initialized); \\ _gdvirtual_##m_name##_initialized = true;\\ }\\ if (_gdvirtual_##m_name) {\\ @@ -175,6 +177,18 @@ def run(target, source, env): #include "core/object/script_instance.h" +#ifdef TOOLS_ENABLED +#define GDVIRTUAL_TRACK(m_virtual, m_initialized) \\ + if (_get_extension()->reloadable) {\\ + VirtualMethodTracker *tracker = memnew(VirtualMethodTracker);\\ + tracker->method = (void **)&m_virtual;\\ + tracker->initialized = &m_initialized;\\ + tracker->next = virtual_method_list;\\ + virtual_method_list = tracker;\\ + } +#else +#define GDVIRTUAL_TRACK(m_virtual, m_initialized) +#endif """ |