Author: juergbi
Date: Fri Feb  8 19:23:24 2008
New Revision: 1001
URL: http://svn.gnome.org/viewvc/vala?rev=1001&view=rev

Log:
2008-02-08  Juerg Billeter  <[EMAIL PROTECTED]>

        * vala/valaattributeprocessor.vala, gobject/valaccodegenerator.vala:
          support delegates with array and struct parameters,
          fixes bug 515202

        * vapi/glib-2.0.vapi: fix GSignalEmissionHook binding


Modified:
   trunk/ChangeLog
   trunk/gobject/valaccodegenerator.vala
   trunk/vala/valaattributeprocessor.vala
   trunk/vapi/glib-2.0.vapi

Modified: trunk/gobject/valaccodegenerator.vala
==============================================================================
--- trunk/gobject/valaccodegenerator.vala       (original)
+++ trunk/gobject/valaccodegenerator.vala       Fri Feb  8 19:23:24 2008
@@ -3078,6 +3078,22 @@
                        param.accept (this);
 
                        cparam_map.set (get_param_pos 
(param.cparameter_position), (CCodeFormalParameter) param.ccodenode);
+
+                       // handle array parameters
+                       if (!param.no_array_length && param.type_reference is 
ArrayType) {
+                               var array_type = (ArrayType) 
param.type_reference;
+                               
+                               var length_ctype = "int";
+                               if (param.type_reference.is_out || 
param.type_reference.is_ref) {
+                                       length_ctype = "int*";
+                               }
+                               
+                               for (int dim = 1; dim <= array_type.rank; 
dim++) {
+                                       var cparam = new CCodeFormalParameter 
(get_array_length_cname (param.name, dim), length_ctype);
+                                       cparam_map.set (get_param_pos 
(param.carray_length_parameter_position + 0.01 * dim), cparam);
+                               }
+                       }
+
                }
 
                // append C parameters in the right order
@@ -3109,8 +3125,17 @@
                int i = 0;
                foreach (FormalParameter param in m.get_parameters ()) {
                        CCodeExpression arg;
-                       arg = new CCodeIdentifier (d_params.get (i).name);
+                       arg = new CCodeIdentifier ((d_params.get (i).ccodenode 
as CCodeFormalParameter).name);
                        carg_map.set (get_param_pos 
(param.cparameter_position), arg);
+
+                       // handle array arguments
+                       if (!param.no_array_length && param.type_reference is 
ArrayType) {
+                               var array_type = (ArrayType) 
param.type_reference;
+                               for (int dim = 1; dim <= array_type.rank; 
dim++) {
+                                       carg_map.set (get_param_pos 
(param.carray_length_parameter_position + 0.01 * dim), new CCodeIdentifier 
(get_array_length_cname (d_params.get (i).name, dim)));
+                               }
+                       }
+
                        i++;
                }
 

Modified: trunk/vala/valaattributeprocessor.vala
==============================================================================
--- trunk/vala/valaattributeprocessor.vala      (original)
+++ trunk/vala/valaattributeprocessor.vala      Fri Feb  8 19:23:24 2008
@@ -78,6 +78,8 @@
        
        public override void visit_creation_method (CreationMethod! m) {
                m.process_attributes ();
+
+               m.accept_children (this);
        }
 
        public override void visit_formal_parameter (FormalParameter! p) {
@@ -90,6 +92,8 @@
 
        public override void visit_delegate (Delegate! d) {
                d.process_attributes ();
+
+               d.accept_children (this);
        }
 
        public override void visit_constant (Constant! c) {
@@ -102,5 +106,7 @@
 
        public override void visit_signal (Signal! sig) {
                sig.process_attributes ();
+
+               sig.accept_children (this);
        }
 }

Modified: trunk/vapi/glib-2.0.vapi
==============================================================================
--- trunk/vapi/glib-2.0.vapi    (original)
+++ trunk/vapi/glib-2.0.vapi    Fri Feb  8 19:23:24 2008
@@ -819,10 +819,9 @@
                public Quark detail;
                public SignalFlags run_type;
        }
-       
-       [NoArrayLength ()]
-       public static delegate bool SignalEmissionHook (SignalInvocationHint 
ihint, uint n_param_values, Value[] param_values, pointer data);
-       
+
+       public delegate bool SignalEmissionHook (SignalInvocationHint ihint, 
[CCode (array_length_pos = 1.9)] Value[] param_values);
+
        [CCode (cprefix = "G_SIGNAL_")]
        public enum SignalFlags {
                RUN_FIRST,
@@ -2910,7 +2909,7 @@
                public static void override_class_closure (uint signal_id, Type 
instance_type, Closure! class_closure);
                [NoArrayLength]
                public static void chain_from_overridden (Value[] 
instance_and_params, out Value return_value);
-               public static ulong add_emission_hook (uint signal_id, Quark 
detail, SignalEmissionHook! hook_func, pointer hook_data, DestroyNotify 
data_destroy);
+               public static ulong add_emission_hook (uint signal_id, Quark 
detail, SignalEmissionHook! hook_func, DestroyNotify data_destroy);
                public static void remove_emission_hook (uint signal_id, ulong 
hook_id);
                public static bool parse_name (string !detailed_signal, Type 
itype, out uint signal_id, out Quark detail, bool force_detail_quark);
        }
_______________________________________________
SVN-commits-list mailing list (read only)
http://mail.gnome.org/mailman/listinfo/svn-commits-list

Want to limit the commits to a few modules? Go to above URL, log in to edit 
your options and select the modules ('topics') you want.
Module maintainer? It is possible to set the reply-to to your development 
mailing list. Email [EMAIL PROTECTED] if interested.

Reply via email to