fix element access assignment with pointers, fixes bug 519933
authorJuerg Billeter <j@bitron.ch>
Mon, 7 Apr 2008 14:01:17 +0000 (14:01 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Mon, 7 Apr 2008 14:01:17 +0000 (14:01 +0000)
2008-04-07  Juerg Billeter  <j@bitron.ch>

* gobject/valaccodeassignmentbinding.vala: fix element access
  assignment with pointers, fixes bug 519933

* tests/pointers.vala: test pointer element access

svn path=/trunk/; revision=1170

ChangeLog
gobject/valaccodeassignmentbinding.vala
tests/pointers.vala

index 9ff7185..df042ef 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-04-07  Jürg Billeter  <j@bitron.ch>
+
+       * gobject/valaccodeassignmentbinding.vala: fix element access
+         assignment with pointers, fixes bug 519933
+
+       * tests/pointers.vala: test pointer element access
+
 2008-04-06  Jürg Billeter  <j@bitron.ch>
 
        * vapi/packages/gtk+-2.0/: fix gtk_tree_sortable_get_sort_column_id
index d1d74ae..2a4eab6 100644 (file)
@@ -541,7 +541,9 @@ public class Vala.CCodeAssignmentBinding : CCodeExpressionBinding {
                        emit_property_assignment ();
                } else if (assignment.left.symbol_reference is Signal) {
                        emit_signal_assignment ();
-               } else if (assignment.left is ElementAccess && !(((ElementAccess) assignment.left).container.static_type is ArrayType)) {
+               } else if (assignment.left is ElementAccess
+                          && !(((ElementAccess) assignment.left).container.static_type is ArrayType)
+                          && !(((ElementAccess) assignment.left).container.static_type is PointerType)) {
                        emit_non_array_element_access ();
                } else {
                        emit_simple_assignment ();
index 1c47c26..3b1e49d 100644 (file)
@@ -11,6 +11,16 @@ struct SimpleStruct {
                SimpleStruct* st = new SimpleStruct[1];
                st->field = 1;
                assert (st->field == st->test ());
+               delete st;
+
+               test_pointers_element_access ();
+       }
+
+       static void test_pointers_element_access () {
+               int* array = new int[42];
+               array[0] = 23;
+               assert (array[0] == 23);
+               delete array;
        }
 }