[vala/switch-to-gir] girparser: Add array and array_length_pos arguments



commit 9b316d0c33a9704e868e6b5dc0f13551c33d90fb
Author: Luca Bruno <lethalman88 gmail com>
Date:   Fri Aug 27 19:23:33 2010 +0200

    girparser: Add array and array_length_pos arguments

 vala/valagirparser.vala |   64 ++++++++++++++++++++++++++++++++++------------
 1 files changed, 47 insertions(+), 17 deletions(-)
---
diff --git a/vala/valagirparser.vala b/vala/valagirparser.vala
index 7a92985..29b96a3 100644
--- a/vala/valagirparser.vala
+++ b/vala/valagirparser.vala
@@ -60,7 +60,9 @@ public class Vala.GirParser : CodeVisitor {
 		NULLABLE,
 		DEPRECATED,
 		REPLACEMENT,
-		DEPRECATED_SINCE;
+		DEPRECATED_SINCE,
+		ARRAY,
+		ARRAY_LENGTH_POS;
 
 		public static ArgumentType? from_string (string name) {
 			var enum_class = (EnumClass) typeof(ArgumentType).class_ref ();
@@ -762,40 +764,52 @@ public class Vala.GirParser : CodeVisitor {
 		}
 	}
 
-	DataType? element_get_type (DataType type, bool owned_by_default, out bool changed = null, ArgumentType arg_type = ArgumentType.TYPE, ArgumentType arg_type_arguments = ArgumentType.TYPE_ARGUMENTS) {
+	DataType? element_get_type (DataType orig_type, bool owned_by_default, out bool changed = null) {
 		if (&changed != null) {
 			changed = false;
 		}
 
-		if (metadata.has_argument (arg_type)) {
-			var new_type = parse_type_from_string (metadata.get_string (arg_type), owned_by_default, metadata.get_source_reference (arg_type));
+		var type = orig_type;
+
+		if (metadata.has_argument (ArgumentType.TYPE)) {
+			var new_type = parse_type_from_string (metadata.get_string (ArgumentType.TYPE), owned_by_default, metadata.get_source_reference (ArgumentType.TYPE));
 			if (&changed != null) {
 				changed = true;
 			}
 			return new_type;
 		}
 
-		if (metadata.has_argument (arg_type_arguments)) {
-			parse_type_arguments_from_string (type, metadata.get_string (arg_type_arguments), metadata.get_source_reference (arg_type_arguments));
+		if (metadata.has_argument (ArgumentType.TYPE_ARGUMENTS)) {
+			parse_type_arguments_from_string (type, metadata.get_string (ArgumentType.TYPE_ARGUMENTS), metadata.get_source_reference (ArgumentType.TYPE_ARGUMENTS));
 			if (&changed != null) {
 				changed = true;
 			}
 		}
 
-		if (!(type is VoidType)) {
-			if (owned_by_default) {
-				if (metadata.has_argument (ArgumentType.UNOWNED)) {
-					type.value_owned = !metadata.get_bool (ArgumentType.UNOWNED);
-				}
-			} else {
-				if (metadata.has_argument (ArgumentType.OWNED)) {
-					type.value_owned = metadata.get_bool (ArgumentType.OWNED);
-				}
+		if (type is VoidType) {
+			return type;
+		}
+
+		if (metadata.get_bool (ArgumentType.ARRAY)) {
+			type = new ArrayType (type, 1, type.source_reference);
+			if (&changed != null) {
+				changed = true;
 			}
-			if (metadata.has_argument (ArgumentType.NULLABLE)) {
-				type.nullable = metadata.get_bool (ArgumentType.NULLABLE);
+		}
+
+		if (owned_by_default) {
+			if (metadata.has_argument (ArgumentType.UNOWNED)) {
+				type.value_owned = !metadata.get_bool (ArgumentType.UNOWNED);
 			}
+		} else {
+			if (metadata.has_argument (ArgumentType.OWNED)) {
+				type.value_owned = metadata.get_bool (ArgumentType.OWNED);
+			}
+		}
+		if (metadata.has_argument (ArgumentType.NULLABLE)) {
+			type.nullable = metadata.get_bool (ArgumentType.NULLABLE);
 		}
+
 		return type;
 	}
 
@@ -807,6 +821,18 @@ public class Vala.GirParser : CodeVisitor {
 		return str;
 	}
 
+	int element_get_integer (string attribute_name, ArgumentType arg_type, int default_value = -1) {
+		var value = default_value;
+		var str = reader.get_attribute ("length");
+		if (str != null) {
+			value = str.to_int ();
+		}
+		if (metadata.has_argument (arg_type)) {
+			value = metadata.get_integer (arg_type);
+		}
+		return value;
+	}
+
 	string? element_get_name (string attribute_name = "name", ArgumentType arg_type = ArgumentType.NAME) {
 		var name = reader.get_attribute (attribute_name);
 		var pattern = metadata.get_string (arg_type);
@@ -1386,6 +1412,10 @@ public class Vala.GirParser : CodeVisitor {
 				ctype = null;
 			}
 
+			if (type is ArrayType && metadata.has_argument (ArgumentType.ARRAY_LENGTH_POS)) {
+				array_length_idx = metadata.get_integer (ArgumentType.ARRAY_LENGTH_POS);
+			}
+
 			if (transfer == "full" || transfer == "container" || destroy != null) {
 				type.value_owned = true;
 			}



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