From: Jürg Billeter Date: Sat, 10 Jan 2009 14:37:13 +0000 (+0000) Subject: Support methods returning null-terminated arrays X-Git-Tag: VALA_0_5_5~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c68064becd3a484d813e9f08ef0dd7bb97fd4b5e;p=thirdparty%2Fvala.git Support methods returning null-terminated arrays 2009-01-10 Jürg Billeter * vala/valacodewriter.vala: * vapigen/valagidlparser.vala: Support methods returning null-terminated arrays * vapi/packages/gtk+-2.0/: Fix gtk_selection_data_get_uris binding * vapi/gtk+-2.0.vapi: regenerated svn path=/trunk/; revision=2324 --- diff --git a/ChangeLog b/ChangeLog index 6d78143d1..5ab55cb57 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2009-01-10 Jürg Billeter + + * vala/valacodewriter.vala: + * vapigen/valagidlparser.vala: + + Support methods returning null-terminated arrays + + * vapi/packages/gtk+-2.0/: + + Fix gtk_selection_data_get_uris binding + + * vapi/gtk+-2.0.vapi: regenerated + 2009-01-10 Jürg Billeter * vala/valacodewriter.vala: diff --git a/vala/valacodewriter.vala b/vala/valacodewriter.vala index 7811c32b2..8f7a83a32 100644 --- a/vala/valacodewriter.vala +++ b/vala/valacodewriter.vala @@ -868,6 +868,10 @@ public class Vala.CodeWriter : CodeVisitor { ccode_params.append_printf ("%sarray_length_pos = %g", separator, m.carray_length_parameter_position); separator = ", "; } + if (m.array_null_terminated && m.return_type is ArrayType) { + ccode_params.append_printf ("%sarray_null_terminated = true", separator); + separator = ", "; + } if (!float_equal (m.cdelegate_target_parameter_position, -3)) { ccode_params.append_printf ("%sdelegate_target_pos = %g", separator, m.cdelegate_target_parameter_position); separator = ", "; diff --git a/vapi/gtk+-2.0.vapi b/vapi/gtk+-2.0.vapi index f77a3ab68..f5c197037 100644 --- a/vapi/gtk+-2.0.vapi +++ b/vapi/gtk+-2.0.vapi @@ -3143,7 +3143,7 @@ namespace Gtk { public Gdk.Pixbuf? get_pixbuf (); public bool get_targets (out Gdk.Atom targets, int n_atoms); public string? get_text (); - [CCode (array_length = false)] + [CCode (array_length = false, array_null_terminated = true)] public string[] get_uris (); public void set (Gdk.Atom type, int format, uchar[] data); public bool set_pixbuf (Gdk.Pixbuf pixbuf); diff --git a/vapi/packages/gtk+-2.0/gtk+-2.0.metadata b/vapi/packages/gtk+-2.0/gtk+-2.0.metadata index 19b3eeb55..578eeeec7 100644 --- a/vapi/packages/gtk+-2.0/gtk+-2.0.metadata +++ b/vapi/packages/gtk+-2.0/gtk+-2.0.metadata @@ -301,7 +301,7 @@ gtk_selection_add_targets.targets is_array="1" gtk_selection_data_copy transfer_ownership="1" gtk_selection_data_get_pixbuf transfer_ownership="1" nullable="1" gtk_selection_data_get_text type_name="string" nullable="1" transfer_ownership="1" -gtk_selection_data_get_uris is_array="1" transfer_ownership="1" no_array_length="1" +gtk_selection_data_get_uris is_array="1" transfer_ownership="1" array_null_terminated="1" gtk_selection_data_set.length hidden="1" gtk_selection_data_set_uris.uris is_array="1" no_array_length="1" GtkSettings.queued_settings hidden="1" diff --git a/vapigen/valagidlparser.vala b/vapigen/valagidlparser.vala index 7278dad6d..4a9dbf45b 100644 --- a/vapigen/valagidlparser.vala +++ b/vapigen/valagidlparser.vala @@ -1367,6 +1367,11 @@ public class Vala.GIdlParser : CodeVisitor { if (eval (nv[1]) == "1") { m.no_array_length = true; } + } else if (nv[0] == "array_null_terminated") { + if (eval (nv[1]) == "1") { + m.no_array_length = true; + m.array_null_terminated = true; + } } else if (nv[0] == "type_name") { var sym = new UnresolvedSymbol (null, eval (nv[1])); if (return_type is UnresolvedType) { @@ -1514,6 +1519,11 @@ public class Vala.GIdlParser : CodeVisitor { if (eval (nv[1]) == "1") { p.no_array_length = true; } + } else if (nv[0] == "array_null_terminated") { + if (eval (nv[1]) == "1") { + p.no_array_length = true; + p.array_null_terminated = true; + } } else if (nv[0] == "array_length_pos") { set_array_length_pos = true; array_length_pos = eval (nv[1]).to_double ();