Skip to content

Commit

Permalink
Merge pull request #1214 from dsnopek/ptrtoarg-native-struct
Browse files Browse the repository at this point in the history
Ensure that PtrToArg specializations for native structs are used
  • Loading branch information
dsnopek authored Sep 8, 2023
2 parents adcc955 + 3cd3f24 commit 5cdc2fc
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 0 deletions.
6 changes: 6 additions & 0 deletions binding_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -1179,6 +1179,12 @@ def generate_engine_classes_bindings(api, output_dir, use_template_get_node):
else:
fully_used_classes.add("Wrapped")

# In order to ensure that PtrToArg specializations for native structs are
# always used, let's move any of them into 'fully_used_classes'.
for type_name in used_classes:
if is_struct_type(type_name) and not is_included_struct_type(type_name):
fully_used_classes.add(type_name)

for type_name in fully_used_classes:
if type_name in used_classes:
used_classes.remove(type_name)
Expand Down
2 changes: 2 additions & 0 deletions include/godot_cpp/core/method_ptrcall.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,7 @@ MAKE_PTRARG_BY_REFERENCE(Variant);

template <class T>
struct PtrToArg<T *> {
static_assert(std::is_base_of<Object, T>::value, "Cannot encode non-Object value as an Object");
_FORCE_INLINE_ static T *convert(const void *p_ptr) {
return reinterpret_cast<T *>(godot::internal::get_object_instance_binding(*reinterpret_cast<GDExtensionObjectPtr *>(const_cast<void *>(p_ptr))));
}
Expand All @@ -179,6 +180,7 @@ struct PtrToArg<T *> {

template <class T>
struct PtrToArg<const T *> {
static_assert(std::is_base_of<Object, T>::value, "Cannot encode non-Object value as an Object");
_FORCE_INLINE_ static const T *convert(const void *p_ptr) {
return reinterpret_cast<const T *>(godot::internal::get_object_instance_binding(*reinterpret_cast<GDExtensionObjectPtr *>(const_cast<void *>(p_ptr))));
}
Expand Down

0 comments on commit 5cdc2fc

Please sign in to comment.