From: Luca Bruno Date: Sun, 17 Oct 2010 05:36:36 +0000 (-0700) Subject: girparser: Stop parsing if the context already has the provided package X-Git-Tag: 0.11.2~37 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2110dba8a7171be2e3eb0febe0515ad06ae3782f;p=thirdparty%2Fvala.git girparser: Stop parsing if the context already has the provided package --- diff --git a/compiler/valacompiler.vala b/compiler/valacompiler.vala index 772ed94a0..ae88a6b0f 100644 --- a/compiler/valacompiler.vala +++ b/compiler/valacompiler.vala @@ -328,12 +328,6 @@ class Vala.Compiler { var gir_parser = new GirParser (); gir_parser.parse (context); - if (gir_parser.get_package_names != null) { - foreach (var pkg in gir_parser.get_package_names ()) { - context.add_package (pkg); - } - } - if (context.report.get_errors () > 0 || (fatal_warnings && context.report.get_warnings () > 0)) { return quit (); } diff --git a/vala/valagirparser.vala b/vala/valagirparser.vala index a77b0473b..a09611eb0 100644 --- a/vala/valagirparser.vala +++ b/vala/valagirparser.vala @@ -37,7 +37,6 @@ public class Vala.GirParser : CodeVisitor { MarkupTokenType current_token; string[] cheader_filenames; - string[] package_names; HashMap attributes_map = new HashMap (str_hash, str_equal); @@ -149,7 +148,13 @@ public class Vala.GirParser : CodeVisitor { } else if (reader.name == "include") { parse_include (); } else if (reader.name == "package") { - parse_package (); + var pkg = parse_package (); + if (context.has_package (pkg)) { + // package already provided elsewhere, stop parsing this GIR + return; + } else { + context.add_package (pkg); + } } else if (reader.name == "c:include") { parse_c_include (); } else { @@ -167,11 +172,12 @@ public class Vala.GirParser : CodeVisitor { end_element ("include"); } - void parse_package () { + string parse_package () { start_element ("package"); - add_package_name (reader.get_attribute ("name")); + var pkg = reader.get_attribute ("name"); next (); end_element ("package"); + return pkg; } void parse_c_include () { @@ -1428,23 +1434,5 @@ public class Vala.GirParser : CodeVisitor { Report.error (null, "Metadata file `%s' not found".printf (metadata_filename)); } } - - void add_package_name (string name) { - if (package_names == null) { - package_names = new string[0]; - } - - foreach (var existing in package_names) { - if (name == existing) { - return; - } - } - - package_names += name; - } - - public string[]? get_package_names () { - return package_names; - } }