]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
girparser: Stop parsing if the context already has the provided package
authorLuca Bruno <lethalman88@gmail.com>
Sun, 17 Oct 2010 05:36:36 +0000 (22:36 -0700)
committerEvan Nemerson <evan@coeus-group.com>
Mon, 8 Nov 2010 09:43:18 +0000 (01:43 -0800)
compiler/valacompiler.vala
vala/valagirparser.vala

index 772ed94a017baeaafae7f35226390f2e122e2d43..ae88a6b0fb098300513af86a4c9eb5c12706d329 100644 (file)
@@ -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 ();
                }
index a77b0473b8036db306699b15ed73bccbbc79be86..a09611eb0516a962d27a947d4376ea7201fe108b 100644 (file)
@@ -37,7 +37,6 @@ public class Vala.GirParser : CodeVisitor {
        MarkupTokenType current_token;
 
        string[] cheader_filenames;
-       string[] package_names;
 
        HashMap<string,string> attributes_map = new HashMap<string,string> (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;
-       }
 }