vala r1013 - in trunk: . gobject vala



Author: juergbi
Date: Sat Feb 16 12:23:55 2008
New Revision: 1013
URL: http://svn.gnome.org/viewvc/vala?rev=1013&view=rev

Log:
2008-02-16  Juerg Billeter  <j bitron ch>

	* vala/valadelegate.vala, gobject/valaccodegenerator.vala: support
	  [NoArrayLength] attribute for delegates


Modified:
   trunk/ChangeLog
   trunk/gobject/valaccodegenerator.vala
   trunk/vala/valadelegate.vala

Modified: trunk/gobject/valaccodegenerator.vala
==============================================================================
--- trunk/gobject/valaccodegenerator.vala	(original)
+++ trunk/gobject/valaccodegenerator.vala	Sat Feb 16 12:23:55 2008
@@ -3184,7 +3184,13 @@
 			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)));
+					CCodeExpression clength;
+					if (d_params.get (i).no_array_length) {
+						clength = new CCodeConstant ("-1");
+					} else {
+						clength = new CCodeIdentifier (get_array_length_cname (d_params.get (i).name, dim));
+					}
+					carg_map.set (get_param_pos (param.carray_length_parameter_position + 0.01 * dim), clength);
 				}
 			}
 

Modified: trunk/vala/valadelegate.vala
==============================================================================
--- trunk/vala/valadelegate.vala	(original)
+++ trunk/vala/valadelegate.vala	Sat Feb 16 12:23:55 2008
@@ -62,12 +62,29 @@
 	 */
 	public double cdelegate_target_parameter_position { get; set; }
 
+	/**
+	 * Specifies whether the array length should implicitly be passed
+	 * if the parameter type is an array.
+	 */
+	public bool no_array_length {
+		get {
+			return _no_array_length;
+		}
+		set {
+			_no_array_length = value;
+			foreach (FormalParameter param in parameters) {
+				param.no_array_length = value;
+			}
+		}
+	}
+
 	private Gee.List<TypeParameter> type_parameters = new ArrayList<TypeParameter> ();
 
 	private Gee.List<FormalParameter> parameters = new ArrayList<FormalParameter> ();
 	private string cname;
 
 	private DataType _return_type;
+	private bool _no_array_length;
 
 	/**
 	 * Creates a new delegate.
@@ -103,6 +120,9 @@
 	 * @param param a formal parameter
 	 */
 	public void add_parameter (FormalParameter! param) {
+		if (no_array_length) {
+			param.no_array_length = true;
+		}
 		// default C parameter position
 		param.cparameter_position = parameters.size + 1;
 		param.carray_length_parameter_position = param.cparameter_position + 0.1;
@@ -219,6 +239,8 @@
 		foreach (Attribute a in attributes) {
 			if (a.name == "CCode") {
 				process_ccode_attribute (a);
+			} else if (a.name == "NoArrayLength") {
+				no_array_length = true;
 			}
 		}
 	}



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