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.