diff --git a/binding_generator.py b/binding_generator.py index 42307c8dd..3a00049b4 100644 --- a/binding_generator.py +++ b/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(args), arg_count" function_call += ");" diff --git a/test/project/main.gd b/test/project/main.gd index 5abe864b0..bad25012b 100644 --- a/test/project/main.gd +++ b/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) diff --git a/test/src/example.cpp b/test/src/example.cpp index e605a4545..6c5e736df 100644 --- a/test/src/example.cpp +++ b/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); diff --git a/test/src/example.h b/test/src/example.h index 8c8b2508d..7f1b5b20d 100644 --- a/test/src/example.h +++ b/test/src/example.h @@ -115,6 +115,7 @@ class Example : public Control { 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 test_bitfield(BitField flags);