From a61cdc88606fbd0230555f1657d0cd635ba4bb5b Mon Sep 17 00:00:00 2001 From: David Snopek Date: Sat, 21 Oct 2023 17:54:46 -0500 Subject: [PATCH] Add protections against registering classes that didn't use GDCLASS() --- include/godot_cpp/classes/wrapped.hpp | 19 +++++++++++++++++++ include/godot_cpp/core/class_db.hpp | 1 + 2 files changed, 20 insertions(+) diff --git a/include/godot_cpp/classes/wrapped.hpp b/include/godot_cpp/classes/wrapped.hpp index 2bbffc02..af2ce4c1 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 * 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() { \ @@ -425,6 +433,17 @@ public: \ static ::godot::StringName &get_parent_class_static() { \ 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) { \ diff --git a/include/godot_cpp/core/class_db.hpp b/include/godot_cpp/core/class_db.hpp index 17e093a7..4196a76b 100644 --- a/include/godot_cpp/core/class_db.hpp +++ b/include/godot_cpp/core/class_db.hpp @@ -170,6 +170,7 @@ public: template void ClassDB::_register_class(bool p_virtual, bool p_exposed) { + static_assert(TypesAreSame::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