[vala/switch-to-gir] girparser: Guess array_length_cname for fields
- From: Luca Bruno <lucabru src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/switch-to-gir] girparser: Guess array_length_cname for fields
- Date: Sat, 28 Aug 2010 17:14:30 +0000 (UTC)
commit 20223506db2acde19e994522217dcafb5e7c525f
Author: Luca Bruno <lucabru src gnome org>
Date: Sat Aug 28 18:59:09 2010 +0200
girparser: Guess array_length_cname for fields
vala/valagirparser.vala | 26 +++++++++++++++++++++++---
1 files changed, 23 insertions(+), 3 deletions(-)
---
diff --git a/vala/valagirparser.vala b/vala/valagirparser.vala
index be68958..733c6b5 100644
--- a/vala/valagirparser.vala
+++ b/vala/valagirparser.vala
@@ -964,9 +964,9 @@ public class Vala.GirParser : CodeVisitor {
} else if (info.symbol is Method && !(info.symbol is CreationMethod)) {
var method = (Method) info.symbol;
if (method.name.has_prefix ("get_")) {
- var symbols = current_symbols_info[method.name.offset ("get_".length)];
- if (symbols != null) {
- foreach (var cinfo in symbols) {
+ var infos = current_symbols_info[method.name.offset ("get_".length)];
+ if (infos != null) {
+ foreach (var cinfo in infos) {
var sym = cinfo.symbol;
if (sym is Property) {
// assume getter for property
@@ -1009,6 +1009,25 @@ public class Vala.GirParser : CodeVisitor {
if (colliding.size > 1) {
return true;
}
+ // length?
+ string array_name = null;
+ if (info.symbol.name.has_prefix ("n_")) {
+ array_name = info.symbol.name.offset (2);
+ } else if (info.symbol.name.has_suffix ("_length")) {
+ array_name = info.symbol.name.ndup (info.symbol.name.length - "_length".length);
+ }
+ if (array_name != null && current_symbols_info.contains (array_name)) {
+ var infos = current_symbols_info[array_name];
+ foreach (var cinfo in infos) {
+ var field = cinfo.symbol as Field;
+ if (field != null && field.variable_type is ArrayType) {
+ // found it
+ field.set_array_length_cname (info.symbol.name);
+ field.no_array_length = false;
+ return true;
+ }
+ }
+ }
}
return false;
@@ -1850,6 +1869,7 @@ public class Vala.GirParser : CodeVisitor {
}
var field = new Field (name, type, null, get_current_src ());
field.access = SymbolAccessibility.PUBLIC;
+ field.no_array_length = true;
if (allow_none == "1") {
type.nullable = true;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]