Skip to content

Commit fe06472

Browse files
authored
Merge pull request #1484 from dsnopek/virtual-node-pointer
Fix undefined symbol error on Linux with virtual methods that take `Node *` arguments
2 parents 21d526e + 7f74fe7 commit fe06472

File tree

4 files changed

+16
-14
lines changed

4 files changed

+16
-14
lines changed

include/godot_cpp/classes/ref.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -261,8 +261,8 @@ struct PtrToArg<const Ref<T> &> {
261261

262262
template <typename T>
263263
struct GetTypeInfo<Ref<T>, typename EnableIf<TypeInherits<RefCounted, T>::value>::type> {
264-
static const GDExtensionVariantType VARIANT_TYPE = GDEXTENSION_VARIANT_TYPE_OBJECT;
265-
static const GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE;
264+
static constexpr GDExtensionVariantType VARIANT_TYPE = GDEXTENSION_VARIANT_TYPE_OBJECT;
265+
static constexpr GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE;
266266

267267
static inline PropertyInfo get_class_info() {
268268
return make_property_info(Variant::Type::OBJECT, "", PROPERTY_HINT_RESOURCE_TYPE, T::get_class_static());
@@ -271,8 +271,8 @@ struct GetTypeInfo<Ref<T>, typename EnableIf<TypeInherits<RefCounted, T>::value>
271271

272272
template <typename T>
273273
struct GetTypeInfo<const Ref<T> &, typename EnableIf<TypeInherits<RefCounted, T>::value>::type> {
274-
static const GDExtensionVariantType VARIANT_TYPE = GDEXTENSION_VARIANT_TYPE_OBJECT;
275-
static const GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE;
274+
static constexpr GDExtensionVariantType VARIANT_TYPE = GDEXTENSION_VARIANT_TYPE_OBJECT;
275+
static constexpr GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE;
276276

277277
static inline PropertyInfo get_class_info() {
278278
return make_property_info(Variant::Type::OBJECT, "", PROPERTY_HINT_RESOURCE_TYPE, T::get_class_static());

include/godot_cpp/core/type_info.hpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -208,17 +208,17 @@ struct GetTypeInfo<const Variant &> {
208208

209209
template <typename T>
210210
struct GetTypeInfo<T *, typename EnableIf<TypeInherits<Object, T>::value>::type> {
211-
static const GDExtensionVariantType VARIANT_TYPE = GDEXTENSION_VARIANT_TYPE_OBJECT;
212-
static const GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE;
211+
static constexpr GDExtensionVariantType VARIANT_TYPE = GDEXTENSION_VARIANT_TYPE_OBJECT;
212+
static constexpr GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE;
213213
static inline PropertyInfo get_class_info() {
214214
return make_property_info(Variant::Type::OBJECT, "", PROPERTY_HINT_RESOURCE_TYPE, T::get_class_static());
215215
}
216216
};
217217

218218
template <typename T>
219219
struct GetTypeInfo<const T *, typename EnableIf<TypeInherits<Object, T>::value>::type> {
220-
static const GDExtensionVariantType VARIANT_TYPE = GDEXTENSION_VARIANT_TYPE_OBJECT;
221-
static const GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE;
220+
static constexpr GDExtensionVariantType VARIANT_TYPE = GDEXTENSION_VARIANT_TYPE_OBJECT;
221+
static constexpr GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE;
222222
static inline PropertyInfo get_class_info() {
223223
return make_property_info(Variant::Type::OBJECT, "", PROPERTY_HINT_RESOURCE_TYPE, T::get_class_static());
224224
}
@@ -236,8 +236,8 @@ inline String enum_qualified_name_to_class_info_name(const String &p_qualified_n
236236
#define TEMPL_MAKE_ENUM_TYPE_INFO(m_enum, m_impl) \
237237
template <> \
238238
struct GetTypeInfo<m_impl> { \
239-
static const Variant::Type VARIANT_TYPE = Variant::INT; \
240-
static const GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE; \
239+
static constexpr Variant::Type VARIANT_TYPE = Variant::INT; \
240+
static constexpr GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE; \
241241
static inline PropertyInfo get_class_info() { \
242242
return make_property_info(Variant::Type::INT, "", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_CLASS_IS_ENUM, \
243243
enum_qualified_name_to_class_info_name(#m_enum)); \
@@ -274,17 +274,17 @@ class BitField {
274274
#define TEMPL_MAKE_BITFIELD_TYPE_INFO(m_enum, m_impl) \
275275
template <> \
276276
struct GetTypeInfo<m_impl> { \
277-
static const Variant::Type VARIANT_TYPE = Variant::INT; \
278-
static const GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE; \
277+
static constexpr Variant::Type VARIANT_TYPE = Variant::INT; \
278+
static constexpr GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE; \
279279
static inline PropertyInfo get_class_info() { \
280280
return make_property_info(Variant::Type::INT, "", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_CLASS_IS_BITFIELD, \
281281
enum_qualified_name_to_class_info_name(#m_enum)); \
282282
} \
283283
}; \
284284
template <> \
285285
struct GetTypeInfo<BitField<m_impl>> { \
286-
static const Variant::Type VARIANT_TYPE = Variant::INT; \
287-
static const GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE; \
286+
static constexpr Variant::Type VARIANT_TYPE = Variant::INT; \
287+
static constexpr GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE; \
288288
static inline PropertyInfo get_class_info() { \
289289
return make_property_info(Variant::Type::INT, "", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_CLASS_IS_BITFIELD, \
290290
enum_qualified_name_to_class_info_name(#m_enum)); \

test/src/example.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,7 @@ void Example::_bind_methods() {
239239

240240
GDVIRTUAL_BIND(_do_something_virtual, "name", "value");
241241
ClassDB::bind_method(D_METHOD("test_virtual_implemented_in_script"), &Example::test_virtual_implemented_in_script);
242+
GDVIRTUAL_BIND(_do_something_virtual_with_control, "control");
242243

243244
ClassDB::bind_method(D_METHOD("test_use_engine_singleton"), &Example::test_use_engine_singleton);
244245

test/src/example.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ class Example : public Control {
186186

187187
GDVIRTUAL2R(String, _do_something_virtual, String, int);
188188
String test_virtual_implemented_in_script(const String &p_name, int p_value);
189+
GDVIRTUAL1(_do_something_virtual_with_control, Control *);
189190

190191
String test_use_engine_singleton() const;
191192
};

0 commit comments

Comments
 (0)