]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
support inner delegates
authorJuerg Billeter <j@bitron.ch>
Sun, 24 Feb 2008 09:00:50 +0000 (09:00 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Sun, 24 Feb 2008 09:00:50 +0000 (09:00 +0000)
2008-02-24  Juerg Billeter  <j@bitron.ch>

* vala/parser.y, vala/valaclass.vala, vala/valainterface.vala:
  support inner delegates

svn path=/trunk/; revision=1042

ChangeLog
vala/parser.y
vala/valaclass.vala
vala/valainterface.vala

index 3be6793718e4c0390ab47e97b9ec9a0f578904e8..21fad5be917b92fdd734f69fc7bd71ab20c6594e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2008-02-24  Jürg Billeter  <j@bitron.ch>
+
+       * vala/parser.y, vala/valaclass.vala, vala/valainterface.vala:
+         support inner delegates
+
 2008-02-23  Jürg Billeter  <j@bitron.ch>
 
        * vala/parser.y, vala/valaclass.vala, vala/valainterface.vala:
index c6e8321c1ef20dfc527429422810fcef16e3ae49..a7500af6e9f7ddf157f9f50686cc9c3918f89cf0 100644 (file)
@@ -2964,6 +2964,7 @@ class_member_declaration
        | class_declaration
        | struct_declaration
        | enum_declaration
+       | delegate_declaration
        ;
 
 constant_declaration
@@ -3933,6 +3934,7 @@ interface_member_declaration
        | class_declaration
        | struct_declaration
        | enum_declaration
+       | delegate_declaration
        ;
 
 enum_declaration
@@ -4200,8 +4202,16 @@ delegate_declaration
                g_object_unref ($6);
                g_object_unref (src);
 
-               vala_namespace_add_delegate (VALA_NAMESPACE (parent_symbol), cb);
-               vala_source_file_add_node (current_source_file, VALA_CODE_NODE (cb));
+               if (VALA_IS_CLASS (parent_symbol)) {
+                       vala_class_add_delegate (VALA_CLASS (parent_symbol), cb);
+               } else if (VALA_IS_INTERFACE (parent_symbol)) {
+                       vala_interface_add_delegate (VALA_INTERFACE (parent_symbol), cb);
+               } else if (VALA_IS_NAMESPACE (parent_symbol)) {
+                       vala_namespace_add_delegate (VALA_NAMESPACE (parent_symbol), cb);
+                       vala_source_file_add_node (current_source_file, VALA_CODE_NODE (cb));
+               } else {
+                       g_assert_not_reached ();
+               }
                g_object_unref (parent_symbol);
 
                if ($3 != -1) {
index 21194ceea5024b501fd307d148b2e82248357dc1..516d81e50a4b5f98832f44efe7263a7b291a9af5 100644 (file)
@@ -83,7 +83,8 @@ public class Vala.Class : Typesymbol {
        private Gee.List<Class> classes = new ArrayList<Class> ();
        private Gee.List<Struct> structs = new ArrayList<Struct> ();
        private Gee.List<Enum> enums = new ArrayList<Enum> ();
-       
+       private Gee.List<Delegate> delegates = new ArrayList<Delegate> ();
+
        /**
         * Specifies the default construction method.
         */
@@ -325,6 +326,16 @@ public class Vala.Class : Typesymbol {
                scope.add (en.name, en);
        }
 
+       /**
+        * Adds the specified delegate as an inner delegate.
+        *
+        * @param d a delegate
+        */
+       public void add_delegate (Delegate! d) {
+               delegates.add (d);
+               scope.add (d.name, d);
+       }
+
        public override void accept (CodeVisitor! visitor) {
                visitor.visit_class (this);
        }
@@ -377,6 +388,10 @@ public class Vala.Class : Typesymbol {
                foreach (Enum en in enums) {
                        en.accept (visitor);
                }
+
+               foreach (Delegate d in delegates) {
+                       d.accept (visitor);
+               }
        }
 
        public override string! get_cprefix () {
index 089e97da6fbe600cc7b17142cd9ba17d8f057f9b..e3615c1fa32db5a07ca8d4169ff80b677100e049 100644 (file)
@@ -48,6 +48,7 @@ public class Vala.Interface : Typesymbol {
        private Gee.List<Class> classes = new ArrayList<Class> ();
        private Gee.List<Struct> structs = new ArrayList<Struct> ();
        private Gee.List<Enum> enums = new ArrayList<Enum> ();
+       private Gee.List<Delegate> delegates = new ArrayList<Delegate> ();
 
        private string cname;
        private string lower_case_csuffix;
@@ -237,6 +238,16 @@ public class Vala.Interface : Typesymbol {
                scope.add (en.name, en);
        }
 
+       /**
+        * Adds the specified delegate as an inner delegate.
+        *
+        * @param d a delegate
+        */
+       public void add_delegate (Delegate! d) {
+               delegates.add (d);
+               scope.add (d.name, d);
+       }
+
        public override string get_cname (bool const_type = false) {
                if (cname == null) {
                        cname = "%s%s".printf (parent_symbol.get_cprefix (), name);
@@ -332,6 +343,10 @@ public class Vala.Interface : Typesymbol {
                foreach (Enum en in enums) {
                        en.accept (visitor);
                }
+
+               foreach (Delegate d in delegates) {
+                       d.accept (visitor);
+               }
        }
 
        public override bool is_reference_type () {