From e502f235a857f61402ca82919e9ef4830c0e39f3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=BCrg=20Billeter?= Date: Thu, 17 Jul 2008 09:40:37 +0000 Subject: [PATCH] Support [CCode (type = "Foo")] for parameters, based on patch by Daniel MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 2008-07-17 Jürg Billeter * vala/valaformalparameter.vala: * vala/valainterfacewriter.vala: * gobject/valaccodeinvocationexpressionbinding.vala: Support [CCode (type = "Foo")] for parameters, based on patch by Daniel Svensson, fixes bug 543073 * vapigen/valagidlparser.vala: Add support for ctype metadata attribute for parameters * vapi/packages/gtk+-2.0/: Fix gtk_menu_shell_append binding * vapi/gtk+-2.0.vapi: regenerated svn path=/trunk/; revision=1710 --- ChangeLog | 19 +++++++++++++++++++ gobject/valaccodeinvocationexpressionbinding.vala | 4 ++++ vala/valaformalparameter.vala | 8 ++++++++ vala/valainterfacewriter.vala | 4 ++++ vapi/gtk+-2.0.vapi | 2 +- vapi/packages/gtk+-2.0/gtk+-2.0.metadata | 2 +- vapigen/valagidlparser.vala | 2 ++ 7 files changed, 39 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 27432e1..51efce0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,24 @@ 2008-07-17 Jürg Billeter + * vala/valaformalparameter.vala: + * vala/valainterfacewriter.vala: + * gobject/valaccodeinvocationexpressionbinding.vala: + + Support [CCode (type = "Foo")] for parameters, + based on patch by Daniel Svensson, fixes bug 543073 + + * vapigen/valagidlparser.vala: + + Add support for ctype metadata attribute for parameters + + * vapi/packages/gtk+-2.0/: + + Fix gtk_menu_shell_append binding + + * vapi/gtk+-2.0.vapi: regenerated + +2008-07-17 Jürg Billeter + * vala/valaarraytype.vala: Fix symbol dependency calculation for arrays, fixes bug 537255 diff --git a/gobject/valaccodeinvocationexpressionbinding.vala b/gobject/valaccodeinvocationexpressionbinding.vala index dab9171..57646e8 100644 --- a/gobject/valaccodeinvocationexpressionbinding.vala +++ b/gobject/valaccodeinvocationexpressionbinding.vala @@ -286,6 +286,10 @@ public class Vala.CCodeInvocationExpressionBinding : CCodeExpressionBinding { ccall_expr = ccomma; } + + if (param.ctype != null) { + cexpr = new CCodeCastExpression (cexpr, param.ctype); + } } arg_pos = codegen.get_param_pos (param.cparameter_position, ellipsis); } else { diff --git a/vala/valaformalparameter.vala b/vala/valaformalparameter.vala index 0cae171..d8a21e2 100644 --- a/vala/valaformalparameter.vala +++ b/vala/valaformalparameter.vala @@ -82,6 +82,11 @@ public class Vala.FormalParameter : Symbol { */ public double cdelegate_target_parameter_position { get; set; } + /** + * Specifies the type of the parameter in the C function. + */ + public string? ctype { get; set; } + private DataType _data_type; /** @@ -132,6 +137,9 @@ public class Vala.FormalParameter : Symbol { } private void process_ccode_attribute (Attribute a) { + if (a.has_argument ("type")) { + ctype = a.get_string ("type"); + } if (a.has_argument ("array_length_pos")) { carray_length_parameter_position = a.get_double ("array_length_pos"); } diff --git a/vala/valainterfacewriter.vala b/vala/valainterfacewriter.vala index c412c48..004c821 100644 --- a/vala/valainterfacewriter.vala +++ b/vala/valainterfacewriter.vala @@ -621,6 +621,10 @@ public class Vala.InterfaceWriter : CodeVisitor { var ccode_params = new StringBuilder (); var separator = ""; + if (param.ctype != null) { + ccode_params.append_printf ("%stype = \"%s\"", separator, param.ctype); + separator = ", "; + } if (!float_equal (param.carray_length_parameter_position, i + 0.1)) { ccode_params.append_printf ("%sarray_length_pos = %g", separator, param.carray_length_parameter_position); separator = ", "; diff --git a/vapi/gtk+-2.0.vapi b/vapi/gtk+-2.0.vapi index fb8d9c8..49ca89c 100644 --- a/vapi/gtk+-2.0.vapi +++ b/vapi/gtk+-2.0.vapi @@ -3721,7 +3721,7 @@ namespace Gtk { public uint menu_flag; public uint ignore_enter; public void activate_item (Gtk.Widget menu_item, bool force_deactivate); - public void append (Gtk.MenuItem child); + public void append ([CCode (type = "GtkWidget*")] Gtk.MenuItem child); public void deselect (); public bool get_take_focus (); public void prepend (Gtk.Widget child); diff --git a/vapi/packages/gtk+-2.0/gtk+-2.0.metadata b/vapi/packages/gtk+-2.0/gtk+-2.0.metadata index 3fbdde3..94c3554 100644 --- a/vapi/packages/gtk+-2.0/gtk+-2.0.metadata +++ b/vapi/packages/gtk+-2.0/gtk+-2.0.metadata @@ -174,7 +174,7 @@ GtkMenuItem::toggle_size_request has_emitter="1" GtkMenuShell.children type_arguments="MenuItem" weak="0" GtkMenuShell::cancel has_emitter="1" GtkMenuShell::deactivate has_emitter="1" -gtk_menu_shell_append.child type_name="MenuItem" +gtk_menu_shell_append.child type_name="MenuItem" ctype="GtkWidget*" gtk_message_dialog_new ellipsis="1" gtk_message_dialog_new.parent nullable="1" gtk_message_dialog_new_with_markup ellipsis="1" diff --git a/vapigen/valagidlparser.vala b/vapigen/valagidlparser.vala index 1ad07f8..a6529c3 100644 --- a/vapigen/valagidlparser.vala +++ b/vapigen/valagidlparser.vala @@ -1474,6 +1474,8 @@ public class Vala.GIdlParser : CodeVisitor { delegate_target_pos = eval (nv[1]).to_double (); } else if (nv[0] == "type_name") { ((UnresolvedType) param_type).unresolved_symbol = new UnresolvedSymbol (null, eval (nv[1])); + } else if (nv[0] == "ctype") { + p.ctype = eval (nv[1]); } else if (nv[0] == "type_arguments") { var type_args = eval (nv[1]).split (","); foreach (string type_arg in type_args) { -- 2.7.4