Browse Source

Merge pull request #1018 from vnen/typed-array-constructor

Support typed array default values in extension API
Rémi Verschelde 2 years ago
parent
commit
0f3a0913f1
2 changed files with 6 additions and 4 deletions
  1. 2 0
      binding_generator.py
  2. 4 4
      include/godot_cpp/core/memory.hpp

+ 2 - 0
binding_generator.py

@@ -2129,6 +2129,8 @@ def correct_default_value(value, type_name):
         return value_map[value]
         return value_map[value]
     if value == "":
     if value == "":
         return f"{type_name}()"
         return f"{type_name}()"
+    if value.startswith("Array["):
+        return f"{{}}"
     return value
     return value
 
 
 
 

+ 4 - 4
include/godot_cpp/core/memory.hpp

@@ -108,7 +108,7 @@ public:
 
 
 template <class T>
 template <class T>
 void memdelete(T *p_class, typename std::enable_if<!std::is_base_of_v<godot::Wrapped, T>>::type * = nullptr) {
 void memdelete(T *p_class, typename std::enable_if<!std::is_base_of_v<godot::Wrapped, T>>::type * = nullptr) {
-	if (!__has_trivial_destructor(T)) {
+	if (!std::is_trivially_destructible<T>::value) {
 		p_class->~T();
 		p_class->~T();
 	}
 	}
 
 
@@ -122,7 +122,7 @@ void memdelete(T *p_class) {
 
 
 template <class T, class A>
 template <class T, class A>
 void memdelete_allocator(T *p_class) {
 void memdelete_allocator(T *p_class) {
-	if (!__has_trivial_destructor(T)) {
+	if (!std::is_trivially_destructible<T>::value) {
 		p_class->~T();
 		p_class->~T();
 	}
 	}
 
 
@@ -145,7 +145,7 @@ T *memnew_arr_template(size_t p_elements, const char *p_descr = "") {
 	ERR_FAIL_COND_V(!mem, failptr);
 	ERR_FAIL_COND_V(!mem, failptr);
 	*(mem - 1) = p_elements;
 	*(mem - 1) = p_elements;
 
 
-	if (!__has_trivial_constructor(T)) {
+	if (!std::is_trivially_destructible<T>::value) {
 		T *elems = (T *)mem;
 		T *elems = (T *)mem;
 
 
 		/* call operator new */
 		/* call operator new */
@@ -161,7 +161,7 @@ template <typename T>
 void memdelete_arr(T *p_class) {
 void memdelete_arr(T *p_class) {
 	uint64_t *ptr = (uint64_t *)p_class;
 	uint64_t *ptr = (uint64_t *)p_class;
 
 
-	if (!__has_trivial_destructor(T)) {
+	if (!std::is_trivially_destructible<T>::value) {
 		uint64_t elem_count = *(ptr - 1);
 		uint64_t elem_count = *(ptr - 1);
 
 
 		for (uint64_t i = 0; i < elem_count; i++) {
 		for (uint64_t i = 0; i < elem_count; i++) {