[vala] Support owned keyword for delegates called once



commit d74c5fb0654ef5985d763a7847c8013de781aac3
Author: Luca Bruno <lucabru src gnome org>
Date:   Tue Jun 4 22:46:20 2013 +0200

    Support owned keyword for delegates called once

 codegen/valaccodedelegatemodule.vala   |    2 +-
 codegen/valaccodemethodcallmodule.vala |    2 +-
 vala/valamethod.vala                   |    1 +
 3 files changed, 3 insertions(+), 2 deletions(-)
---
diff --git a/codegen/valaccodedelegatemodule.vala b/codegen/valaccodedelegatemodule.vala
index 2fba0f4..959bdcb 100644
--- a/codegen/valaccodedelegatemodule.vala
+++ b/codegen/valaccodedelegatemodule.vala
@@ -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) {
diff --git a/codegen/valaccodemethodcallmodule.vala b/codegen/valaccodemethodcallmodule.vala
index b30422a..5d968b0 100644
--- a/codegen/valaccodemethodcallmodule.vala
+++ b/codegen/valaccodemethodcallmodule.vala
@@ -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);
                                                                        }
diff --git a/vala/valamethod.vala b/vala/valamethod.vala
index a7e3dcb..5e5f826 100644
--- a/vala/valamethod.vala
+++ b/vala/valamethod.vala
@@ -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);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]