vala r1001 - in trunk: . gobject vala vapi



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  <j bitron ch>

	* 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);
 	}



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]