|
31 | 31 | #pragma once |
32 | 32 |
|
33 | 33 | #include "core/extension/gdextension_interface.h" |
| 34 | +#include "core/object/gdtype.h" |
34 | 35 | #include "core/object/message_queue.h" |
35 | 36 | #include "core/object/object_id.h" |
36 | 37 | #include "core/os/rw_lock.h" |
@@ -494,21 +495,18 @@ private: |
494 | 495 | friend class ::ClassDB; \ |
495 | 496 | \ |
496 | 497 | public: \ |
497 | | - virtual const StringName *_get_class_namev() const override { \ |
498 | | - return &get_class_static(); \ |
| 498 | + virtual const GDType &_get_typev() const override { \ |
| 499 | + return get_gdtype_static(); \ |
499 | 500 | } \ |
500 | | - static const StringName &get_class_static() { \ |
501 | | - static StringName _class_name_static; \ |
502 | | - if (unlikely(!_class_name_static)) { \ |
503 | | - assign_class_name_static(#m_class, _class_name_static); \ |
| 501 | + static const GDType &get_gdtype_static() { \ |
| 502 | + static GDType *_class_static; \ |
| 503 | + if (unlikely(!_class_static)) { \ |
| 504 | + assign_type_static(&_class_static, #m_class, &super_type::get_gdtype_static()); \ |
504 | 505 | } \ |
505 | | - return _class_name_static; \ |
| 506 | + return *_class_static; \ |
506 | 507 | } \ |
507 | | - virtual bool is_class(const String &p_class) const override { \ |
508 | | - if (_get_extension() && _get_extension()->is_class(p_class)) { \ |
509 | | - return true; \ |
510 | | - } \ |
511 | | - return (p_class == (#m_class)) ? true : m_inherits::is_class(p_class); \ |
| 508 | + static const StringName &get_class_static() { \ |
| 509 | + return get_gdtype_static().get_name(); \ |
512 | 510 | } \ |
513 | 511 | \ |
514 | 512 | protected: \ |
@@ -668,7 +666,7 @@ class Object { |
668 | 666 | Variant script; // Reference does not exist yet, store it in a Variant. |
669 | 667 | HashMap<StringName, Variant> metadata; |
670 | 668 | HashMap<StringName, Variant *> metadata_properties; |
671 | | - mutable const StringName *_class_name_ptr = nullptr; |
| 669 | + mutable const GDType *_gdtype_ptr = nullptr; |
672 | 670 |
|
673 | 671 | void _add_user_signal(const String &p_name, const Array &p_args = Array()); |
674 | 672 | bool _has_user_signal(const StringName &p_name) const; |
@@ -774,9 +772,7 @@ class Object { |
774 | 772 | Variant _call_bind(const Variant **p_args, int p_argcount, Callable::CallError &r_error); |
775 | 773 | Variant _call_deferred_bind(const Variant **p_args, int p_argcount, Callable::CallError &r_error); |
776 | 774 |
|
777 | | - virtual const StringName *_get_class_namev() const { |
778 | | - return &get_class_static(); |
779 | | - } |
| 775 | + virtual const GDType &_get_typev() const { return get_gdtype_static(); } |
780 | 776 |
|
781 | 777 | TypedArray<StringName> _get_meta_list_bind() const; |
782 | 778 | TypedArray<Dictionary> _get_property_list_bind() const; |
@@ -842,26 +838,25 @@ class Object { |
842 | 838 | }; |
843 | 839 |
|
844 | 840 | /* TYPE API */ |
845 | | - static void assign_class_name_static(const Span<char> &p_name, StringName &r_target); |
| 841 | + static void assign_type_static(GDType **type_ptr, const char *p_name, const GDType *super_type); |
846 | 842 |
|
847 | | - static const StringName &get_class_static() { |
848 | | - static StringName _class_name_static; |
849 | | - if (unlikely(!_class_name_static)) { |
850 | | - assign_class_name_static("Object", _class_name_static); |
| 843 | + static const GDType &get_gdtype_static() { |
| 844 | + static GDType *_class_static; |
| 845 | + if (unlikely(!_class_static)) { |
| 846 | + assign_type_static(&_class_static, "Object", nullptr); |
851 | 847 | } |
852 | | - return _class_name_static; |
| 848 | + return *_class_static; |
853 | 849 | } |
854 | 850 |
|
| 851 | + const GDType &get_gdtype() const; |
| 852 | + |
| 853 | + static const StringName &get_class_static() { return get_gdtype_static().get_name(); } |
| 854 | + |
855 | 855 | _FORCE_INLINE_ String get_class() const { return get_class_name(); } |
856 | 856 |
|
857 | 857 | virtual String get_save_class() const { return get_class(); } //class stored when saving |
858 | 858 |
|
859 | | - virtual bool is_class(const String &p_class) const { |
860 | | - if (_extension && _extension->is_class(p_class)) { |
861 | | - return true; |
862 | | - } |
863 | | - return (p_class == "Object"); |
864 | | - } |
| 859 | + bool is_class(const String &p_class) const; |
865 | 860 | virtual bool is_class_ptr(void *p_ptr) const { return get_class_ptr_static() == p_ptr; } |
866 | 861 |
|
867 | 862 | template <typename T> |
|
0 commit comments