Przeglądaj źródła

Merge pull request #1128 from Mathis-Z/master

Fixing #1127 by making return types of auto-generated functions dynamic
Rémi Verschelde 2 lat temu
rodzic
commit
d12cf071bb
4 zmienionych plików z 13 dodań i 1 usunięć
  1. 4 1
      binding_generator.py
  2. 3 0
      test/project/main.gd
  3. 5 0
      test/src/example.cpp
  4. 1 0
      test/src/example.h

+ 4 - 1
binding_generator.py

@@ -1799,7 +1799,10 @@ def generate_utility_functions(api, output_dir):
                     arguments.append(arg_name)
                 function_call += ", ".join(arguments)
         else:
-            source.append("\tVariant ret;")
+            if has_return:
+                source.append(f'\t{get_gdextension_type(correct_type(function["return_type"]))} ret;')
+            else:
+                source.append("\tVariant ret;")
             function_call += "___function(&ret, reinterpret_cast<GDExtensionConstVariantPtr *>(args), arg_count"
 
         function_call += ");"

+ 3 - 0
test/project/main.gd

@@ -79,6 +79,9 @@ func _ready():
 	# String += operator
 	assert_equal(example.test_string_ops(), "ABCĎE")
 
+	# UtilityFunctions::str()
+	assert_equal(example.test_str_utility(), "Hello, World! The answer is 42")
+
 	# PackedArray iterators
 	assert_equal(example.test_vector_ops(), 105)
 

+ 5 - 0
test/src/example.cpp

@@ -127,6 +127,7 @@ void Example::_bind_methods() {
 	ClassDB::bind_method(D_METHOD("test_dictionary"), &Example::test_dictionary);
 	ClassDB::bind_method(D_METHOD("test_node_argument"), &Example::test_node_argument);
 	ClassDB::bind_method(D_METHOD("test_string_ops"), &Example::test_string_ops);
+	ClassDB::bind_method(D_METHOD("test_str_utility"), &Example::test_str_utility);
 	ClassDB::bind_method(D_METHOD("test_vector_ops"), &Example::test_vector_ops);
 
 	ClassDB::bind_method(D_METHOD("test_bitfield", "flags"), &Example::test_bitfield);
@@ -280,6 +281,10 @@ String Example::test_string_ops() const {
 	return s;
 }
 
+String Example::test_str_utility() const {
+	return UtilityFunctions::str("Hello, ", "World", "! The answer is ", 42);
+}
+
 int Example::test_vector_ops() const {
 	PackedInt32Array arr;
 	arr.push_back(10);

+ 1 - 0
test/src/example.h

@@ -115,6 +115,7 @@ public:
 	Dictionary test_dictionary() const;
 	Example *test_node_argument(Example *p_node) const;
 	String test_string_ops() const;
+	String test_str_utility() const;
 	int test_vector_ops() const;
 
 	BitField<Flags> test_bitfield(BitField<Flags> flags);