From: Juerg Billeter Date: Sun, 24 Feb 2008 09:00:50 +0000 (+0000) Subject: support inner delegates X-Git-Tag: VALA_0_1_7~49 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=be73e48d649702d9f161da2ee376e2b751460323;p=thirdparty%2Fvala.git support inner delegates 2008-02-24 Juerg Billeter * vala/parser.y, vala/valaclass.vala, vala/valainterface.vala: support inner delegates svn path=/trunk/; revision=1042 --- diff --git a/ChangeLog b/ChangeLog index 3be679371..21fad5be9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2008-02-24 Jürg Billeter + + * vala/parser.y, vala/valaclass.vala, vala/valainterface.vala: + support inner delegates + 2008-02-23 Jürg Billeter * vala/parser.y, vala/valaclass.vala, vala/valainterface.vala: diff --git a/vala/parser.y b/vala/parser.y index c6e8321c1..a7500af6e 100644 --- a/vala/parser.y +++ b/vala/parser.y @@ -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) { diff --git a/vala/valaclass.vala b/vala/valaclass.vala index 21194ceea..516d81e50 100644 --- a/vala/valaclass.vala +++ b/vala/valaclass.vala @@ -83,7 +83,8 @@ public class Vala.Class : Typesymbol { private Gee.List classes = new ArrayList (); private Gee.List structs = new ArrayList (); private Gee.List enums = new ArrayList (); - + private Gee.List delegates = new ArrayList (); + /** * 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 () { diff --git a/vala/valainterface.vala b/vala/valainterface.vala index 089e97da6..e3615c1fa 100644 --- a/vala/valainterface.vala +++ b/vala/valainterface.vala @@ -48,6 +48,7 @@ public class Vala.Interface : Typesymbol { private Gee.List classes = new ArrayList (); private Gee.List structs = new ArrayList (); private Gee.List enums = new ArrayList (); + private Gee.List delegates = new ArrayList (); 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 () {