]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Drop extra copy of captured unowned parameters in async methods
authorJürg Billeter <j@bitron.ch>
Wed, 15 Aug 2012 08:45:33 +0000 (10:45 +0200)
committerJürg Billeter <j@bitron.ch>
Wed, 15 Aug 2012 08:45:33 +0000 (10:45 +0200)
codegen/valaccodebasemodule.vala

index 15a4aa677bf34f9b242d97951a1dee42762baeae..0684436b90006257b3afb6bda183299e9072d50a 100644 (file)
@@ -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);
                }