]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
reset takes_ownership and transfers_ownership for base types of pointer
authorJuerg Billeter <j@bitron.ch>
Mon, 7 Apr 2008 18:19:21 +0000 (18:19 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Mon, 7 Apr 2008 18:19:21 +0000 (18:19 +0000)
2008-04-07  Juerg Billeter  <j@bitron.ch>

* vala/valasymbolresolver.vala: reset takes_ownership and
  transfers_ownership for base types of pointer types

* tests/pointers.vala: test element access for methods returning
  pointers

svn path=/trunk/; revision=1178

ChangeLog
tests/pointers.vala
vala/valasymbolresolver.vala

index 6eff74bafcec8018bf76b74e6d60dcc325a68cd2..5e7b1c256967429af05f6e509a52536985010139 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2008-04-07  Jürg Billeter  <j@bitron.ch>
+
+       * vala/valasymbolresolver.vala: reset takes_ownership and
+         transfers_ownership for base types of pointer types
+
+       * tests/pointers.vala: test element access for methods returning
+         pointers
+
 2008-04-07  Jürg Billeter  <j@bitron.ch>
 
        * vala/valasemanticanalyzer.vala: don't compare base_method and
index 3b1e49d73579fb26f6807854492c2d5d6f430f8f..2225487e3b1125b0f09984ea99b01a75ff90b066 100644 (file)
@@ -14,6 +14,7 @@ struct SimpleStruct {
                delete st;
 
                test_pointers_element_access ();
+               test_pointers_return_value ();
        }
 
        static void test_pointers_element_access () {
@@ -22,5 +23,16 @@ struct SimpleStruct {
                assert (array[0] == 23);
                delete array;
        }
+
+       const int[] array = { 42 };
+
+       static int* return_pointer () {
+               return array;
+       }
+
+       static void test_pointers_return_value () {
+               int i = return_pointer ()[0];
+               assert (i == 42);
+       }
 }
 
index 34566ad9f54615bc66539a86cf48101fc91d4f70..6be4fa29625753648f8491a1b16c6d8059d5d0b2 100644 (file)
@@ -276,7 +276,13 @@ public class Vala.SymbolResolver : CodeVisitor {
                }
 
                for (int pointer_level = unresolved_type.pointer_level; pointer_level > 0; pointer_level--) {
-                       type = new PointerType (type);
+                       var base_type = type;
+                       base_type.takes_ownership = false;
+                       base_type.transfers_ownership = false;
+                       base_type.is_ref = false;
+                       base_type.is_out = false;
+
+                       type = new PointerType (base_type);
                }
 
                if (!type.is_reference_type_or_type_parameter ()) {