[vala/switch-to-gir] girparser: Support multiple pattern matches
- From: Luca Bruno <lucabru src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/switch-to-gir] girparser: Support multiple pattern matches
- Date: Sat, 28 Aug 2010 15:33:21 +0000 (UTC)
commit 53efb89cb52d3e13492abc0f739e60728411f6e0
Author: Luca Bruno <lethalman88 gmail com>
Date: Sat Aug 28 17:32:57 2010 +0200
girparser: Support multiple pattern matches
vala/valagirparser.vala | 35 ++++++++++++++++++++++++++++++++---
1 files changed, 32 insertions(+), 3 deletions(-)
---
diff --git a/vala/valagirparser.vala b/vala/valagirparser.vala
index 7bfc443..4dea2d9 100644
--- a/vala/valagirparser.vala
+++ b/vala/valagirparser.vala
@@ -89,6 +89,22 @@ public class Vala.GirParser : CodeVisitor {
}
}
+ class MetadataSet : Metadata {
+ public MetadataSet (MetadataType type) {
+ base ("", type);
+ }
+
+ public void add_sibling (Metadata metadata) {
+ foreach (var child in metadata.children) {
+ add_child (child);
+ }
+ // merge arguments and take precedence
+ foreach (var key in metadata.args.get_keys ()) {
+ args[key] = metadata.args[key];
+ }
+ }
+ }
+
class Metadata {
private static Metadata _empty = null;
public static Metadata empty {
@@ -130,13 +146,26 @@ public class Vala.GirParser : CodeVisitor {
}
public Metadata match_child (string name, MetadataType type = MetadataType.GENERIC) {
+ var result = Metadata.empty;
foreach (var metadata in children) {
if (metadata.type == type && metadata.pattern_spec.match_string (name)) {
metadata.used = true;
- return metadata;
+ if (result == Metadata.empty) {
+ // first match
+ result = metadata;
+ } else {
+ var ms = result as MetadataSet;
+ if (ms == null) {
+ // second match
+ ms = new MetadataSet (type);
+ }
+ ms.add_sibling (result);
+ ms.add_sibling (metadata);
+ result = ms;
+ }
}
}
- return Metadata.empty;
+ return result;
}
public void add_argument (ArgumentType key, Argument value) {
@@ -2573,7 +2602,7 @@ public class Vala.GirParser : CodeVisitor {
var arg = metadata.args[arg_type];
if (!arg.used) {
// if metadata is used and argument is not, then it's a unexpected argument
- Report.warning (arg.source_reference, "argument not used in this context");
+ Report.warning (arg.source_reference, "argument never used");
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]