[vala/switch-to-gir] girparser: Add array and array_length_pos arguments
- From: Luca Bruno <lucabru src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/switch-to-gir] girparser: Add array and array_length_pos arguments
- Date: Fri, 27 Aug 2010 17:29:44 +0000 (UTC)
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]