diff options
author | David Snopek <dsnopek@gmail.com> | 2023-10-21 17:54:46 -0500 |
---|---|---|
committer | David Snopek <dsnopek@gmail.com> | 2023-10-22 08:44:09 -0500 |
commit | a61cdc88606fbd0230555f1657d0cd635ba4bb5b (patch) | |
tree | d1c63dc7f0f49881585df037e5ccd26e24edc3b3 | |
parent | 0a6a19e33bb75d9f6f23adf16b4e695d009b0fc6 (diff) | |
download | redot-cpp-a61cdc88606fbd0230555f1657d0cd635ba4bb5b.tar.gz |
Add protections against registering classes that didn't use GDCLASS()
-rw-r--r-- | include/godot_cpp/classes/wrapped.hpp | 19 | ||||
-rw-r--r-- | include/godot_cpp/core/class_db.hpp | 1 |
2 files changed, 20 insertions, 0 deletions
diff --git a/include/godot_cpp/classes/wrapped.hpp b/include/godot_cpp/classes/wrapped.hpp index 2bbffc0..af2ce4c 100644 --- a/include/godot_cpp/classes/wrapped.hpp +++ b/include/godot_cpp/classes/wrapped.hpp @@ -202,6 +202,8 @@ protected: } \ \ public: \ + typedef m_class self_type; \ + \ static void initialize_class() { \ static bool initialized = false; \ if (initialized) { \ @@ -395,6 +397,10 @@ protected: return nullptr; \ } \ \ + static inline bool has_get_property_list() { \ + return false; \ + } \ + \ static void (Wrapped::*_get_get_property_list())(List<PropertyInfo> * p_list) const { \ return nullptr; \ } \ @@ -416,6 +422,8 @@ protected: } \ \ public: \ + typedef m_class self_type; \ + \ static void initialize_class() {} \ \ static ::godot::StringName &get_class_static() { \ @@ -427,6 +435,17 @@ public: return m_inherits::get_class_static(); \ } \ \ + static GDExtensionObjectPtr create(void *data) { \ + return nullptr; \ + } \ + \ + static GDExtensionClassInstancePtr recreate(void *data, GDExtensionObjectPtr obj) { \ + return nullptr; \ + } \ + \ + static void free(void *data, GDExtensionClassInstancePtr ptr) { \ + } \ + \ static void *_gde_binding_create_callback(void *p_token, void *p_instance) { \ /* Do not call memnew here, we don't want the post-initializer to be called */ \ return new ("") m_class((GodotObject *)p_instance); \ diff --git a/include/godot_cpp/core/class_db.hpp b/include/godot_cpp/core/class_db.hpp index 17e093a..4196a76 100644 --- a/include/godot_cpp/core/class_db.hpp +++ b/include/godot_cpp/core/class_db.hpp @@ -170,6 +170,7 @@ public: template <class T, bool is_abstract> void ClassDB::_register_class(bool p_virtual, bool p_exposed) { + static_assert(TypesAreSame<typename T::self_type, T>::value, "Class not declared properly, please use GDCLASS."); instance_binding_callbacks[T::get_class_static()] = &T::_gde_binding_callbacks; // Register this class within our plugin |