Fixes bug 640721.
return false;
}
- void return_out_parameter (Parameter param) {
+ public void return_out_parameter (Parameter param) {
var delegate_type = param.variable_type as DelegateType;
var value = load_parameter (param);
+ var old_coroutine = is_in_coroutine ();
+ current_method.coroutine = false;
+
ccode.open_if (get_variable_cexpression (param.name));
ccode.add_assignment (new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, get_variable_cexpression (param.name)), get_cvalue_ (value));
if (param.variable_type.is_disposable ()){
ccode.add_else ();
+ current_method.coroutine = old_coroutine;
ccode.add_expression (destroy_parameter (param));
+ current_method.coroutine = false;
}
ccode.close ();
ccode.close ();
}
}
+
+ current_method.coroutine = old_coroutine;
}
public override void visit_return_statement (ReturnStatement stmt) {
void generate_finish_function (Method m) {
- push_context (new EmitContext ());
+ push_context (new EmitContext (m));
string dataname = Symbol.lower_case_to_camel_case (m.get_cname ()) + "Data";
foreach (Parameter param in m.get_parameters ()) {
if (param.direction != ParameterDirection.IN) {
- ccode.add_assignment (new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, new CCodeIdentifier (param.name)), new CCodeMemberAccess.pointer (data_var, get_variable_cname (param.name)));
+ return_out_parameter (param);
if (!(param.variable_type is ValueType) || param.variable_type.nullable) {
ccode.add_assignment (new CCodeMemberAccess.pointer (data_var, get_variable_cname (param.name)), new CCodeConstant ("NULL"));
}
asynchronous/bug613484.vala \
asynchronous/bug620740.vala \
asynchronous/bug639591.vala \
+ asynchronous/bug640721.vala \
asynchronous/bug641182.vala \
asynchronous/bug646945.vala \
asynchronous/bug652252.vala \
--- /dev/null
+async void foo (out int i) {
+}
+
+void main () {
+ var loop = new MainLoop ();
+ foo ((s,r) => { foo.end (r, null); loop.quit (); });
+ loop.run ();
+}