Add test for Reference passing/returning.

pull/631/head
Fabio Alessandrelli 2021-09-28 15:49:53 +02:00
parent b90d0ac555
commit b28853aff1
3 changed files with 13 additions and 0 deletions

View File

@ -10,6 +10,8 @@ func _ready():
prints("returned", $Example.return_something("some string")) prints("returned", $Example.return_something("some string"))
prints("returned const", $Example.return_something_const()) prints("returned const", $Example.return_something_const())
prints("returned ref", $Example.return_extended_ref()) prints("returned ref", $Example.return_extended_ref())
var ref = ExampleRef.new()
prints("sending ref: ", ref.get_instance_id(), "returned ref: ", $Example.extended_ref_checks(ref).get_instance_id())
prints("vararg args", $Example.varargs_func("some", "arguments", "to", "test")) prints("vararg args", $Example.varargs_func("some", "arguments", "to", "test"))
# Use properties. # Use properties.

View File

@ -53,6 +53,7 @@ void Example::_bind_methods() {
ClassDB::bind_method(D_METHOD("return_something"), &Example::return_something); ClassDB::bind_method(D_METHOD("return_something"), &Example::return_something);
ClassDB::bind_method(D_METHOD("return_something_const"), &Example::return_something_const); ClassDB::bind_method(D_METHOD("return_something_const"), &Example::return_something_const);
ClassDB::bind_method(D_METHOD("return_extended_ref"), &Example::return_extended_ref); ClassDB::bind_method(D_METHOD("return_extended_ref"), &Example::return_extended_ref);
ClassDB::bind_method(D_METHOD("extended_ref_checks"), &Example::extended_ref_checks);
{ {
MethodInfo mi; MethodInfo mi;
@ -107,6 +108,15 @@ ExampleRef *Example::return_extended_ref() const {
return memnew(ExampleRef()); return memnew(ExampleRef());
} }
Ref<ExampleRef> Example::extended_ref_checks(Ref<ExampleRef> p_ref) const {
Ref<ExampleRef> ref;
ref.instantiate();
// TODO the returned value gets dereferenced too early and return a null object otherwise.
ref->reference();
UtilityFunctions::print("Example ref checks called with value: ", p_ref->get_instance_id(), ", returning value: ", ref->get_instance_id());
return ref;
}
Variant Example::varargs_func(const Variant **args, GDNativeInt arg_count, GDNativeCallError &error) { Variant Example::varargs_func(const Variant **args, GDNativeInt arg_count, GDNativeCallError &error) {
UtilityFunctions::print("Varargs called with ", String::num(arg_count), " arguments"); UtilityFunctions::print("Varargs called with ", String::num(arg_count), " arguments");
return arg_count; return arg_count;

View File

@ -76,6 +76,7 @@ public:
String return_something(const String &base); String return_something(const String &base);
Viewport *return_something_const() const; Viewport *return_something_const() const;
ExampleRef *return_extended_ref() const; ExampleRef *return_extended_ref() const;
Ref<ExampleRef> extended_ref_checks(Ref<ExampleRef> p_ref) const;
Variant varargs_func(const Variant **args, GDNativeInt arg_count, GDNativeCallError &error); Variant varargs_func(const Variant **args, GDNativeInt arg_count, GDNativeCallError &error);
void emit_custom_signal(const String &name, int value); void emit_custom_signal(const String &name, int value);