]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Support interface prerequisites
authorJürg Billeter <j@bitron.ch>
Fri, 28 Nov 2008 19:36:44 +0000 (19:36 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Fri, 28 Nov 2008 19:36:44 +0000 (19:36 +0000)
2008-11-28  Jürg Billeter  <j@bitron.ch>

* vapigen/valagirparser.vala:

Support interface prerequisites

svn path=/trunk/; revision=2077

ChangeLog
vapigen/valagirparser.vala

index 90f3a2e3a596da5824490992a91884dc759751ad..a8ef1c16ee140b789d0616ee5af3df61e4bff57e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2008-11-28  Jürg Billeter  <j@bitron.ch>
+
+       * vapigen/valagirparser.vala:
+
+       Support interface prerequisites
+
 2008-11-28  Jürg Billeter  <j@bitron.ch>
 
        * vapigen/valagirparser.vala:
index ee5bed4ec38a173ca97340c7ac64372bc2499bc4..dc18691c9cfee8a8d22008bb5a5931ae4921dcc0 100644 (file)
@@ -68,6 +68,8 @@ public class Vala.GirParser : CodeVisitor {
                next ();
                parse_repository ();
 
+               var remove_queue = new ArrayList<CodeNode> ();
+
                foreach (CodeNode node in source_file.get_nodes ()) {
                        if (node is Class) {
                                var cl = (Class) node;
@@ -76,7 +78,7 @@ public class Vala.GirParser : CodeVisitor {
                                var class_struct = ns.scope.lookup (cl.name + "Class") as Struct;
                                if (class_struct != null) {
                                        ns.remove_struct ((Struct) class_struct);
-                                       source_file.remove_node (class_struct);
+                                       remove_queue.add (class_struct);
                                }
                        } else if (node is Interface) {
                                var iface = (Interface) node;
@@ -85,11 +87,15 @@ public class Vala.GirParser : CodeVisitor {
                                var iface_struct = ns.scope.lookup (iface.name + "Iface") as Struct;
                                if (iface_struct != null) {
                                        ns.remove_struct ((Struct) iface_struct);
-                                       source_file.remove_node (iface_struct);
+                                       remove_queue.add (iface_struct);
                                }
                        }
                }
 
+               foreach (CodeNode node in remove_queue) {
+                       source_file.remove_node (node);
+               }
+
                reader = null;
                this.current_source_file = null;
        }
@@ -589,7 +595,12 @@ public class Vala.GirParser : CodeVisitor {
                next ();
                var methods = new ArrayList<Method> ();
                while (current_token == MarkupTokenType.START_ELEMENT) {
-                       if (reader.name == "field") {
+                       if (reader.name == "prerequisite") {
+                               start_element ("prerequisite");
+                               iface.add_prerequisite (parse_type_from_name (reader.get_attribute ("name")));
+                               next ();
+                               end_element ("prerequisite");
+                       } else if (reader.name == "field") {
                                parse_field ();
                        } else if (reader.name == "property") {
                                iface.add_property (parse_property ());