[vala/switch-to-gir] girparser: Add cheader_filename argument and other fixes



commit 300ae76e79aee861df27a27560569402c3eccd15
Author: Luca Bruno <lethalman88 gmail com>
Date:   Wed Aug 25 12:55:43 2010 +0200

    girparser: Add cheader_filename argument and other fixes

 vala/valagirparser.vala |   49 +++++++++++++++++++++++++++++++++-------------
 1 files changed, 35 insertions(+), 14 deletions(-)
---
diff --git a/vala/valagirparser.vala b/vala/valagirparser.vala
index cf749ac..15f4094 100644
--- a/vala/valagirparser.vala
+++ b/vala/valagirparser.vala
@@ -34,11 +34,13 @@ public class Vala.GirParser : CodeVisitor {
 
 	enum ArgumentType {
 		HIDDEN,
-		TYPE;
+		TYPE,
+		CHEADER_FILENAME;
 
 		public static ArgumentType? from_string (string name) {
 			var enum_class = (EnumClass) typeof(ArgumentType).class_ref ();
-			unowned GLib.EnumValue? enum_value = enum_class.get_value_by_nick (name);
+			var nick = name.replace ("_", "-");
+			unowned GLib.EnumValue? enum_value = enum_class.get_value_by_nick (nick);
 			if (enum_value != null) {
 				ArgumentType value = (ArgumentType) enum_value.value;
 				return value;
@@ -356,23 +358,30 @@ public class Vala.GirParser : CodeVisitor {
 
 		Expression? parse_literal () {
 			var src = get_current_src ();
-			var type = current;
-			next ();
-			switch (type) {
+			Expression expr = null;
+
+			switch (current) {
 			case TokenType.TRUE:
-				return new BooleanLiteral (true, src);
+				expr = new BooleanLiteral (true, src);
+				break;
 			case TokenType.FALSE:
-				return new BooleanLiteral (false, src);
+				expr = new BooleanLiteral (false, src);
+				break;
 			case TokenType.INTEGER_LITERAL:
-				return new IntegerLiteral (get_string (), src);
+				expr = new IntegerLiteral (get_string (), src);
+				break;
 			case TokenType.REAL_LITERAL:
-				return new RealLiteral (get_string (), src);
+				expr = new RealLiteral (get_string (), src);
+				break;
 			case TokenType.STRING_LITERAL:
-				return new StringLiteral (get_string (), src);
+				expr = new StringLiteral (get_string (), src);
+				break;
 			default:
 				Report.error (src, "expected literal");
-				return null;
+				break;
 			}
+			next ();
+			return expr;
 		}
 
 		UnresolvedSymbol? parse_symbol_name () {
@@ -622,6 +631,8 @@ public class Vala.GirParser : CodeVisitor {
 		return type;
 	}
 
+	
+
 	void parse_repository () {
 		start_element ("repository");
 		next ();
@@ -646,7 +657,7 @@ public class Vala.GirParser : CodeVisitor {
 			} else {
 				// error
 				Report.error (get_current_src (), "unknown child element `%s' in `repository'".printf (reader.name));
-				break;
+				skip_element ();
 			}
 		}
 		end_element ("repository");
@@ -714,6 +725,8 @@ public class Vala.GirParser : CodeVisitor {
 			gir_namespaces[gir_namespace] = namespace_name;
 		}
 
+		var ns_metadata = metadata.get_child (gir_namespace);
+
 		var ns = context.root.scope.lookup (namespace_name) as Namespace;
 		if (ns == null) {
 			ns = new Namespace (namespace_name, get_current_src ());
@@ -732,9 +745,17 @@ public class Vala.GirParser : CodeVisitor {
 			ns.set_lower_case_cprefix (Symbol.camel_case_to_lower_case (cprefix) + "_");
 		}
 
-		foreach (string c_header in cheader_filenames) {
-			ns.add_cheader_filename (c_header);
+		if (ns_metadata.has_argument (ArgumentType.CHEADER_FILENAME)) {
+			var val = ns_metadata.get_string (ArgumentType.CHEADER_FILENAME);
+			foreach (string filename in val.split (",")) {
+				ns.add_cheader_filename (filename);
+			}
+		} else {
+			foreach (string c_header in cheader_filenames) {
+				ns.add_cheader_filename (c_header);
+			}
 		}
+
 		next ();
 		while (current_token == MarkupTokenType.START_ELEMENT) {
 			if (!push_metadata ()) {



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]