[vala/switch-to-gir] girparser: Add cheader_filename argument and other fixes
- From: Luca Bruno <lucabru src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/switch-to-gir] girparser: Add cheader_filename argument and other fixes
- Date: Wed, 25 Aug 2010 11:28:48 +0000 (UTC)
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]