Fixes bug 622422.
// create copy if necessary as captured variables may need to be kept alive
CCodeExpression cparam = get_variable_cexpression (param.name);
+ if (param.parameter_type.is_real_non_null_struct_type ()) {
+ cparam = new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, cparam);
+ }
if (requires_copy (param_type) && !param.parameter_type.value_owned && !is_unowned_delegate) {
var ma = new MemberAccess.simple (param.name);
ma.symbol_reference = param;
// create copy if necessary as variables in async methods may need to be kept alive
CCodeExpression cparam = get_variable_cexpression (param.name);
+ if (param.parameter_type.is_real_non_null_struct_type ()) {
+ cparam = new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, cparam);
+ }
if (requires_copy (param_type) && !param.parameter_type.value_owned) {
var ma = new MemberAccess.simple (param.name);
ma.symbol_reference = param;
cparam = get_ref_cexpression (param.parameter_type, cparam, ma, param);
- } else if (param.parameter_type.is_real_non_null_struct_type ()) {
- cparam = new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, cparam);
}
asyncblock.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (data_var, get_variable_cname (param.name)), cparam)));
structs/bug606202.vala \
structs/bug613513.vala \
structs/bug613825.vala \
+ structs/bug622422.vala \
delegates/delegates.vala \
delegates/bug595610.vala \
delegates/bug595639.vala \
int i;
}
-void do_foo (Foo foo) {
+void do_foo (Foo foo, Value value) {
}
-async void do_foo_async (Foo foo) {
+async void do_foo_async (Foo foo, Value value) {
}
void main () {
--- /dev/null
+struct Foo {
+ int i;
+}
+
+delegate void TestDelegate ();
+
+void do_foo (TestDelegate d) {
+}
+
+void do_foo_lambda (Foo foo, Value value) {
+ do_foo (() => { foo.i = 1; value = (int) 2; });
+}
+
+void main () {
+}