Support [CCode (type = "Foo")] for parameters, based on patch by Daniel
authorJürg Billeter <j@bitron.ch>
Thu, 17 Jul 2008 09:40:37 +0000 (09:40 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Thu, 17 Jul 2008 09:40:37 +0000 (09:40 +0000)
2008-07-17  Jürg Billeter  <j@bitron.ch>

* 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
gobject/valaccodeinvocationexpressionbinding.vala
vala/valaformalparameter.vala
vala/valainterfacewriter.vala
vapi/gtk+-2.0.vapi
vapi/packages/gtk+-2.0/gtk+-2.0.metadata
vapigen/valagidlparser.vala

index 27432e1..51efce0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,24 @@
 2008-07-17  Jürg Billeter  <j@bitron.ch>
 
+       * 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  <j@bitron.ch>
+
        * vala/valaarraytype.vala:
 
        Fix symbol dependency calculation for arrays, fixes bug 537255
index dab9171..57646e8 100644 (file)
@@ -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 {
index 0cae171..d8a21e2 100644 (file)
@@ -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");
                }
index c412c48..004c821 100644 (file)
@@ -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 = ", ";
index fb8d9c8..49ca89c 100644 (file)
@@ -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);
index 3fbdde3..94c3554 100644 (file)
@@ -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"
index 1ad07f8..a6529c3 100644 (file)
@@ -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) {