set_cvalue (expr, ccall_expr);
} else if (m != null && m.get_attribute_bool ("CCode", "use_inplace", false)) {
set_cvalue (expr, ccall_expr);
+ } else if (!return_result_via_out_param
+ && ((m != null && !has_ref_out_param (m)) || (deleg != null && !has_ref_out_param (deleg)))
+ && (result_type is ValueType && !result_type.is_disposable ())) {
+ set_cvalue (expr, ccall_expr);
} else if (!return_result_via_out_param) {
var temp_var = get_temp_variable (result_type, result_type.value_owned, null, false);
var temp_ref = get_variable_cexpression (temp_var.name);
return to_string_func;
}
+
+ bool has_ref_out_param (Callable c) {
+ foreach (var param in c.get_parameters ()) {
+ if (param.direction != ParameterDirection.IN) {
+ return true;
+ }
+ }
+ return false;
+ }
}