vala r1119 - in trunk: . gobject tests vala
- From: juergbi svn gnome org
- To: svn-commits-list gnome org
- Subject: vala r1119 - in trunk: . gobject tests vala
- Date: Mon, 10 Mar 2008 15:16:06 +0000 (GMT)
Author: juergbi
Date: Mon Mar 10 15:16:06 2008
New Revision: 1119
URL: http://svn.gnome.org/viewvc/vala?rev=1119&view=rev
Log:
2008-03-10 Juerg Billeter <j bitron ch>
* vala/valaarray.vala, gobject/valaccodeelementaccessbinding.vala:
Make the length field of a multi-dimensional array an array of ints,
currently only works with literal indices, patch by Rob Taylor
* tests/arrays.vala: test length field of multi-dimensional arrays
Modified:
trunk/ChangeLog
trunk/gobject/valaccodeelementaccessbinding.vala
trunk/tests/arrays.vala
trunk/vala/valaarray.vala
Modified: trunk/gobject/valaccodeelementaccessbinding.vala
==============================================================================
--- trunk/gobject/valaccodeelementaccessbinding.vala (original)
+++ trunk/gobject/valaccodeelementaccessbinding.vala Mon Mar 10 15:16:06 2008
@@ -43,7 +43,17 @@
var ccontainer = (CCodeExpression) expr.container.ccodenode;
var cindex = (CCodeExpression) indices[0].ccodenode;
- if (container_type == codegen.string_type.data_type) {
+ if (expr.container.symbol_reference is ArrayLengthField) {
+ /* Figure if cindex is a constant expression and calculate dim...*/
+ var lit = indices[0] as LiteralExpression;
+ var memberaccess = expr.container as MemberAccess;
+ if (lit != null &&
+ lit.literal is IntegerLiteral &&
+ memberaccess != null) {
+ int dim = (lit.literal as IntegerLiteral).value.to_int ();
+ codenode = codegen.get_array_length_cexpression (memberaccess.inner, dim + 1);
+ }
+ } else if (container_type == codegen.string_type.data_type) {
// access to unichar in a string
var coffsetcall = new CCodeFunctionCall (new CCodeIdentifier ("g_utf8_offset_to_pointer"));
coffsetcall.add_argument (ccontainer);
Modified: trunk/tests/arrays.vala
==============================================================================
--- trunk/tests/arrays.vala (original)
+++ trunk/tests/arrays.vala Mon Mar 10 15:16:06 2008
@@ -256,6 +256,9 @@
i++;
}
assert (i == 3 * 2);
+
+ assert (array.length[0] == 3);
+ assert (array.length[1] == 2);
}
static void main (string[] args) {
Modified: trunk/vala/valaarray.vala
==============================================================================
--- trunk/vala/valaarray.vala (original)
+++ trunk/vala/valaarray.vala Mon Mar 10 15:16:06 2008
@@ -141,7 +141,14 @@
length_field.access = SymbolAccessibility.PUBLIC;
var root_symbol = source_reference.file.context.root;
- length_field.type_reference = new ValueType ((Typesymbol) root_symbol.scope.lookup ("int"));
+ if (rank > 1) {
+ // length is an int[] containing the dimensions of the array, starting at 0
+ ValueType integer = new ValueType((Typesymbol) root_symbol.scope.lookup("int"));
+ length_field.type_reference = new ArrayType (integer, 1);
+ length_field.type_reference.add_type_argument (integer);
+ } else {
+ length_field.type_reference = new ValueType ((Typesymbol) root_symbol.scope.lookup ("int"));
+ }
}
return length_field;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]