]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Support owned keyword for delegates called once
authorLuca Bruno <lucabru@src.gnome.org>
Tue, 4 Jun 2013 20:46:20 +0000 (22:46 +0200)
committerLuca Bruno <lucabru@src.gnome.org>
Tue, 4 Jun 2013 20:46:20 +0000 (22:46 +0200)
codegen/valaccodedelegatemodule.vala
codegen/valaccodemethodcallmodule.vala
vala/valamethod.vala

index 2fba0f4805eb8614b4a778c5e102bb4d7c55b365..959bdcb0ab0f806993c12d931852383a7bfdede5 100644 (file)
@@ -408,7 +408,7 @@ public class Vala.CCodeDelegateModule : CCodeArrayModule {
                        ccode.add_declaration (return_type_cname, new CCodeVariableDeclarator ("result", ccall));
                }
 
-               if (d.has_target && !dt.value_owned && dt.is_called_once) {
+               if (d.has_target /* TODO: && dt.value_owned */ && dt.is_called_once) {
                        // destroy notify "self" after the call
                        CCodeExpression? destroy_notify = null;
                        if (m.closure) {
index b30422a508b061983a43067118015867e26d34db..5d968b032ab8201f2bc29177a6412ca587526fef 100644 (file)
@@ -364,7 +364,7 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule {
                                                                        cexpr = new CCodeConditionalExpression (new CCodeBinaryExpression (CCodeBinaryOperator.EQUALITY, cexpr, new CCodeIdentifier ("NULL")), new CCodeIdentifier ("NULL"), closure_new);
                                                                } else {
                                                                        carg_map.set (get_param_pos (get_ccode_delegate_target_pos (param)), delegate_target);
-                                                                       if (deleg_type.value_owned) {
+                                                                       if (deleg_type.value_owned && !deleg_type.is_called_once) {
                                                                                assert (delegate_target_destroy_notify != null);
                                                                                carg_map.set (get_param_pos (get_ccode_delegate_target_pos (param) + 0.01), delegate_target_destroy_notify);
                                                                        }
index a7e3dcb4c0eaf1dd1504a198ca1532e6eddbcb7c..5e5f82649ab2b276db263184e67407720cf5ad8f 100644 (file)
@@ -894,6 +894,7 @@ public class Vala.Method : Subroutine {
 
                var callback_type = new DelegateType ((Delegate) glib_ns.scope.lookup ("AsyncReadyCallback"));
                callback_type.nullable = true;
+               callback_type.value_owned = true;
                callback_type.is_called_once = true;
 
                var callback_param = new Parameter ("_callback_", callback_type);