C#: Fix premature free of returned Variant in vararg methods

Notably, this fixes obscure issues after calling `script.New()` when
the returned instance is a `RefCounted`.
This commit is contained in:
Ignacio Roldán Etcheverry 2022-12-12 17:54:21 +01:00
parent bc5d67c613
commit 833b252ce7

View file

@ -2489,9 +2489,12 @@ Error BindingsGenerator::_generate_cs_native_calls(const InternalCall &p_icall,
if (!ret_void) {
if (return_type->cname != name_cache.type_Variant) {
// Usually the return value takes ownership, but in this case the variant is only used
// for conversion to another return type. As such, the local variable takes ownership.
r_output << "using godot_variant " << C_LOCAL_VARARG_RET " = ";
} else {
r_output << "using godot_variant " << C_LOCAL_RET " = ";
// Variant's [c_out] takes ownership of the variant value
r_output << "godot_variant " << C_LOCAL_RET " = ";
}
}