vala r1013 - in trunk: . gobject vala
- From: juergbi svn gnome org
- To: svn-commits-list gnome org
- Subject: vala r1013 - in trunk: . gobject vala
- Date: Sat, 16 Feb 2008 12:23:55 +0000 (GMT)
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]