[vala/switch-to-gir: 21/22] girparser: Better support for arrays in return type.
- From: Luca Bruno <lucabru src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/switch-to-gir: 21/22] girparser: Better support for arrays in return type.
- Date: Sat, 20 Nov 2010 10:25:26 +0000 (UTC)
commit 04af9cea16adc9178550fc52400de031ae067a55
Author: Luca Bruno <lucabru src gnome org>
Date: Sat Nov 20 10:58:06 2010 +0100
girparser: Better support for arrays in return type.
vala/valagirparser.vala | 61 +++++++++++++++++++++++++------
vapi/packages/gio-2.0/Gio-2.0.metadata | 6 ++--
2 files changed, 52 insertions(+), 15 deletions(-)
---
diff --git a/vala/valagirparser.vala b/vala/valagirparser.vala
index f9548d3..35db30d 100644
--- a/vala/valagirparser.vala
+++ b/vala/valagirparser.vala
@@ -1232,6 +1232,33 @@ public class Vala.GirParser : CodeVisitor {
return name;
}
+ void set_array_ccode (Symbol sym, ParameterInfo info) {
+ if (sym is Method) {
+ var m = (Method) sym;
+ m.carray_length_parameter_position = info.vala_idx;
+ } else if (sym is Delegate) {
+ var d = (Delegate) sym;
+ d.carray_length_parameter_position = info.vala_idx;
+ } else {
+ var param = (Parameter) sym;
+ param.carray_length_parameter_position = info.vala_idx;
+ param.set_array_length_cname (info.param.name);
+ }
+ if (info.param.variable_type.to_qualified_string () != "int") {
+ var unresolved_type = (UnresolvedType) info.param.variable_type;
+ var resolved_struct = resolve_symbol (glib_ns.scope, unresolved_type.unresolved_symbol) as Struct;
+ if (resolved_struct != null) {
+ if (sym is Method) {
+ var m = (Method) sym;
+ m.array_length_type = resolved_struct.get_cname ();
+ } else {
+ var param = (Parameter) sym;
+ param.array_length_type = resolved_struct.get_cname ();
+ }
+ }
+ }
+ }
+
void parse_repository () {
start_element ("repository");
if (reader.get_attribute ("version") != GIR_VERSION) {
@@ -2334,6 +2361,13 @@ public class Vala.GirParser : CodeVisitor {
}
end_element ("parameters");
}
+ var array_length_idx = -1;
+ if (return_type is ArrayType && metadata.has_argument (ArgumentType.ARRAY_LENGTH_IDX)) {
+ array_length_idx = metadata.get_integer (ArgumentType.ARRAY_LENGTH_IDX);
+ parameters[array_length_idx].keep = false;
+ array_length_parameters.add (array_length_idx);
+ }
+
int i = 0, j=1;
int last = -1;
@@ -2386,18 +2420,8 @@ public class Vala.GirParser : CodeVisitor {
Report.error (get_current_src (), "invalid array_length index");
continue;
}
- info.param.carray_length_parameter_position = parameters[info.array_length_idx].vala_idx;
- var length_param = parameters[info.array_length_idx].param;
- info.param.set_array_length_cname (parameters[info.array_length_idx].param.name);
- if (length_param.variable_type.to_qualified_string () != "int") {
- var unresolved_type = (UnresolvedType) length_param.variable_type;
- var resolved_struct = resolve_symbol (glib_ns.scope, unresolved_type.unresolved_symbol) as Struct;
- if (resolved_struct != null) {
- info.param.array_length_type = resolved_struct.get_cname ();
- }
- }
- }
- if (info.param.variable_type is ArrayType && info.array_length_idx == -1) {
+ set_array_ccode (info.param, parameters[info.array_length_idx]);
+ } else if (info.param.variable_type is ArrayType) {
info.param.no_array_length = true;
}
@@ -2417,6 +2441,19 @@ public class Vala.GirParser : CodeVisitor {
}
}
}
+ if (array_length_idx != -1) {
+ if (array_length_idx >= parameters.size) {
+ Report.error (get_current_src (), "invalid array_length index");
+ } else {
+ set_array_ccode (s, parameters[array_length_idx]);
+ }
+ } else if (return_type is ArrayType) {
+ if (s is Method) {
+ ((Method) s).no_array_length = true;
+ } else {
+ ((Delegate) s).no_array_length = true;
+ }
+ }
if (throws_string == "1") {
s.add_error_type (new ErrorType (null, null));
diff --git a/vapi/packages/gio-2.0/Gio-2.0.metadata b/vapi/packages/gio-2.0/Gio-2.0.metadata
index 2d34c33..95a968a 100644
--- a/vapi/packages/gio-2.0/Gio-2.0.metadata
+++ b/vapi/packages/gio-2.0/Gio-2.0.metadata
@@ -18,9 +18,9 @@ AppLaunchContext
.get_display.files type_arguments="File"
.get_startup_notify_id.files type_arguments="File"
ApplicationCommandLine.get_platform_data nullable
-BufferedInputStream.peek.buffer type="uint8[]" array_length_idx=2
-BufferedInputStream.peek_buffer type="unowned uint8[]"
- .count skip
+
+// Missing GI features
+BufferedInputStream.peek_buffer type="unowned uint8[]" array_length_idx=0
/* OLD METADATA FOR REFERENCE
GLib cprefix="G" lower_case_cprefix="g_" cheader_filename="gio/gio.h" gir_namespace="Gio" gir_version="2.0"
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]