From 2499aa65087cb86c3194afb183bc82d687e0bb20 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=BCrg=20Billeter?= Date: Wed, 15 Aug 2012 10:45:33 +0200 Subject: [PATCH] codegen: Drop extra copy of captured unowned parameters in async methods --- codegen/valaccodebasemodule.vala | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index 15a4aa677..0684436b9 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -1766,6 +1766,9 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { void capture_parameter (Parameter param, CCodeStruct data, int block_id) { generate_type_declaration (param.variable_type, cfile); + var m = param.parent_symbol as Method; + bool coroutine = m != null && m.coroutine; + var param_type = param.variable_type.copy (); if (!param.variable_type.value_owned) { param_type.value_owned = !no_implicit_copy (param.variable_type); @@ -1775,7 +1778,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { // create copy if necessary as captured variables may need to be kept alive param.captured = false; var value = load_parameter (param); - if (requires_copy (param_type) && !param.variable_type.value_owned) { + if (requires_copy (param_type) && !param.variable_type.value_owned && !coroutine) { // directly access parameters in ref expressions value = copy_value (value, param); } -- 2.47.2