if (to.is_real_non_null_struct_type ()) {
// structs are returned via out parameter
cfunc.add_parameter (new CCodeParameter ("result", get_ccode_name (to) + "*"));
+ ccall.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, get_cvalue_ (result)));
} else if (to is ArrayType) {
// return array length if appropriate
// tmp = _variant_get (variant, &tmp_length);
}
}
- ccode.add_assignment (get_cvalue_ (result), ccall);
+ if (!to.is_real_non_null_struct_type ()) {
+ ccode.add_assignment (get_cvalue_ (result), ccall);
+ } else {
+ ccode.add_expression (ccall);
+ }
push_function (cfunc);
- ccode.add_return (deserialize_expression (to, new CCodeIdentifier ("value"), new CCodeIdentifier ("*result")));
+ CCodeExpression func_result = deserialize_expression (to, new CCodeIdentifier ("value"), new CCodeIdentifier ("*result"));
+ if (to.is_real_non_null_struct_type ()) {
+ ccode.add_assignment (new CCodeIdentifier ("*result"), func_result);
+ } else {
+ ccode.add_return (func_result);
+ }
pop_function ();
structs/bug656693.vala \
structs/bug658048.vala \
structs/bug660426.vala \
+ structs/bug661945.vala \
delegates/delegates.vala \
delegates/bug539166.vala \
delegates/bug595610.vala \