]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
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 27432e1b12278de85c950635092f4e822f4cbe17..51efce03f0f3d2afc379928bf748c86009ecc183 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,22 @@
+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:
index dab917104833179de9ed50ac11a3e78872b5b7ae..57646e8e88439ba7385882f6842a02750db47bb5 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 0cae171d2b19dd2747138bfd1b95d862429d01f3..d8a21e2cd04ba8554540a7c1a68aa4d385b51da8 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 c412c48cdf7b2a2f5bb176669a4623effb661dfe..004c821ceb47ee1bddb3db92d95fe03ad64ba796 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 fb8d9c8e0d878d094d7444cc340ed2ce11c2937b..49ca89ca6428490a581f8f2e903cbca4a3be745d 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 3fbdde33b8cffcc79b342ab8ced8961e25d25ee2..94c35541d3054e079f5c7b75d77f7cdddb6df221 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 1ad07f8a7369b0ff2d4fcd0c8fc20af12f0645e9..a6529c3638fbc9dfd4786b7e895336fe3fd6662f 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) {