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