]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
On-demand Delegate.has_target
authorLuca Bruno <lucabru@src.gnome.org>
Wed, 6 Jul 2011 19:25:30 +0000 (21:25 +0200)
committerLuca Bruno <lucabru@src.gnome.org>
Mon, 1 Aug 2011 16:17:04 +0000 (18:17 +0200)
vala/valadelegate.vala
vala/valagenieparser.vala
vala/valagirparser.vala
vala/valaparser.vala
vala/valasignal.vala
vapigen/valagidlparser.vala

index ddaba923861865fea707fc9f1ae3089ff4d22070..6d22fbae099ff17e049b3f335ae92978b2786040 100644 (file)
@@ -42,7 +42,22 @@ public class Vala.Delegate : TypeSymbol {
         * The reference to the object instance will be appended to the end of
         * the argument list in the generated C code.
         */
-       public bool has_target { get; set; }
+       public bool has_target {
+               get {
+                       if (_has_target == null) {
+                               _has_target = get_attribute_bool ("CCode", "has_target", true);
+                       }
+                       return _has_target;
+               }
+               set {
+                       _has_target = value;
+                       if (value) {
+                               remove_attribute_argument ("CCode", "has_target");
+                       } else {
+                               set_attribute_bool ("CCode", "has_target", false);
+                       }
+               }
+       }
 
        public DataType? sender_type { get; set; }
 
@@ -85,6 +100,7 @@ public class Vala.Delegate : TypeSymbol {
        private string cname;
 
        private DataType _return_type;
+       private bool? _has_target;
 
        /**
         * Creates a new delegate.
@@ -283,9 +299,6 @@ public class Vala.Delegate : TypeSymbol {
                if (a.has_argument ("cname")) {
                        set_cname (a.get_string ("cname"));
                }
-               if (a.has_argument ("has_target")) {
-                       has_target = a.get_bool ("has_target");
-               }
                if (a.has_argument ("instance_pos")) {
                        cinstance_parameter_position = a.get_double ("instance_pos");
                }
index 0de741cc5cb8614dae58d772b28b87b017b5c27a..4f9c01640d3c360e4241767ec63a1b6d153c8838 100644 (file)
@@ -3683,8 +3683,8 @@ public class Vala.Genie.Parser : CodeVisitor {
                        d.access = get_access (sym.name);
                }
 
-               if (!(ModifierFlags.STATIC in flags)) {
-                       d.has_target = true;
+               if (ModifierFlags.STATIC in flags) {
+                       d.has_target = false;
                }
                if (ModifierFlags.EXTERN in flags || scanner.source_file.file_type == SourceFileType.PACKAGE) {
                        d.external = true;
index 25601fcf03d2531452f06bd0c1b8b94115c0c496..b78ba1911e3d929fc180fb634be32e37b961ce66 100644 (file)
@@ -2472,6 +2472,7 @@ public class Vala.GirParser : CodeVisitor {
 
                if (element_name == "callback") {
                        s = new Delegate (name, return_type, current.source_reference);
+                       ((Delegate) s).has_target = false;
                } else if (element_name == "constructor") {
                        if (name == "new") {
                                name = null;
index 60c7a6039663c616937ab065604c0bca00ce2205..6aedb9216495b5c80768ad1139435c4938faf7ac 100644 (file)
@@ -3374,8 +3374,7 @@ public class Vala.Parser : CodeVisitor {
                                // TODO enable warning in future releases
                                Report.warning (get_last_src (), "deprecated syntax, use [CCode (has_target = false)]");
                        }
-               } else {
-                       d.has_target = true;
+                       d.has_target = false;
                }
                if (ModifierFlags.EXTERN in flags || scanner.source_file.file_type == SourceFileType.PACKAGE) {
                        d.external = true;
index ea4b767ed4ae7f5c1a6cc65cf08544dcc8974be8..ee0667e1ae74e04cdf68f6d0f34351bfcf7498ee 100644 (file)
@@ -126,7 +126,6 @@ public class Vala.Signal : Symbol, Lockable {
                var actual_return_type = return_type.get_actual_type (sender_type, null, node_reference);
 
                var generated_delegate = new Delegate (null, actual_return_type);
-               generated_delegate.has_target = true;
                generated_delegate.access = SymbolAccessibility.PUBLIC;
                generated_delegate.owner = scope;
 
index 92fdb04677b886a44f44e21cf673d81872c84b8f..55c414c8513b47a163751185c12dfcc14fd3bd41 100644 (file)
@@ -450,6 +450,7 @@ public class Vala.GIdlParser : CodeVisitor {
 
                var cb = new Delegate (node.name, return_type, current_source_reference);
                cb.access = SymbolAccessibility.PUBLIC;
+               cb.has_target = false;
 
                bool check_has_target = true;
                bool suppress_throws = false;