From: Jürg Billeter Date: Wed, 28 Feb 2007 19:39:00 +0000 (+0000) Subject: test Array.resize method and Array.length field update length when X-Git-Tag: VALA_0_0_6~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4f047823ab262e5bc4226ee491cfb8eb65d7fc93;p=thirdparty%2Fvala.git test Array.resize method and Array.length field update length when 2007-02-28 Jürg Billeter * tests/test-022.vala, tests/test-022.out: test Array.resize method and Array.length field * vala/valacodegenerator.vala: update length when resizing arrays svn path=/trunk/; revision=204 --- diff --git a/vala/ChangeLog b/vala/ChangeLog index bbca43adb..0e5bafe91 100644 --- a/vala/ChangeLog +++ b/vala/ChangeLog @@ -1,3 +1,9 @@ +2007-02-28 Jürg Billeter + + * tests/test-022.vala, tests/test-022.out: test Array.resize method and + Array.length field + * vala/valacodegenerator.vala: update length when resizing arrays + 2007-02-27 Jürg Billeter * vala/valacodenode.vala: mark source_reference as construction property diff --git a/vala/tests/test-022.out b/vala/tests/test-022.out index f87544fc2..48a77806e 100644 --- a/vala/tests/test-022.out +++ b/vala/tests/test-022.out @@ -1 +1 @@ -One dimensional array creation and assignment: 1 2 3 4 5 6 7 8 9 +One dimensional array creation and assignment: 1 2 3 4 5 6 7 8 9 10 11 diff --git a/vala/tests/test-022.vala b/vala/tests/test-022.vala index 011f8038c..949a63c01 100644 --- a/vala/tests/test-022.vala +++ b/vala/tests/test-022.vala @@ -28,8 +28,13 @@ class Maman.Foo { if (a[3] == 4) { stdout.printf (" 8"); } + if (a.length == 4) { + stdout.printf (" 9"); + } + a.resize (10); + stdout.printf (" %d", a.length); - stdout.printf (" 9\n"); + stdout.printf (" 11\n"); return 0; } diff --git a/vala/vala/valacodegenerator.vala b/vala/vala/valacodegenerator.vala index 46c1bb4a6..6188b4dac 100644 --- a/vala/vala/valacodegenerator.vala +++ b/vala/vala/valacodegenerator.vala @@ -3008,6 +3008,15 @@ public class Vala.CodeGenerator : CodeVisitor { visit_expression (expr); } + + if (m is ArrayResizeMethod) { + var ccomma = new CCodeCommaExpression (); + ccomma.append_expression ((CCodeExpression) expr.ccodenode); + // FIXME: size expression must not be evaluated twice at runtime (potential side effects) + var new_size = (CCodeExpression) ((CodeNode) expr.get_argument_list ().data).ccodenode; + ccomma.append_expression (new CCodeAssignment (get_array_length_cexpression (ma.inner, 1), new_size)); + expr.ccodenode = ccomma; + } } public override void visit_element_access (ElementAccess! expr)