From: Jürg Billeter Date: Wed, 15 Aug 2012 08:45:33 +0000 (+0200) Subject: codegen: Drop extra copy of captured unowned parameters in async methods X-Git-Tag: 0.17.5~14 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2499aa65087cb86c3194afb183bc82d687e0bb20;p=thirdparty%2Fvala.git codegen: Drop extra copy of captured unowned parameters in async methods --- 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); }