[vala/switch-to-gir] girparser: Guess array_length_cname for fields



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]