From: Jürg Billeter Date: Fri, 28 Nov 2008 19:36:44 +0000 (+0000) Subject: Support interface prerequisites X-Git-Tag: VALA_0_5_2~34 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=34ba0922c766911bf30648d43130ae645293e024;p=thirdparty%2Fvala.git Support interface prerequisites 2008-11-28 Jürg Billeter * vapigen/valagirparser.vala: Support interface prerequisites svn path=/trunk/; revision=2077 --- diff --git a/ChangeLog b/ChangeLog index 90f3a2e3a..a8ef1c16e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-11-28 Jürg Billeter + + * vapigen/valagirparser.vala: + + Support interface prerequisites + 2008-11-28 Jürg Billeter * vapigen/valagirparser.vala: diff --git a/vapigen/valagirparser.vala b/vapigen/valagirparser.vala index ee5bed4ec..dc18691c9 100644 --- a/vapigen/valagirparser.vala +++ b/vapigen/valagirparser.vala @@ -68,6 +68,8 @@ public class Vala.GirParser : CodeVisitor { next (); parse_repository (); + var remove_queue = new ArrayList (); + 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 (); 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 ());