diff options
Diffstat (limited to 'tests/programs/replace_owner.zc')
| -rw-r--r-- | tests/programs/replace_owner.zc | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/tests/programs/replace_owner.zc b/tests/programs/replace_owner.zc new file mode 100644 index 0000000..8318616 --- /dev/null +++ b/tests/programs/replace_owner.zc @@ -0,0 +1,27 @@ +namespace; +include rt; + +// a released owner can receive a same-scope replacement, without copying owners. +int*.u growing(int n) { + int* buffer = rt.new(int), next; int i = 0; + while (i < n) { + if (!(i & 1)) { + next = rt.new(int); + *next = i; + rt.free(buffer); + buffer = next; + } + i++; + } + return buffer; +} +fn main() { + let base = rt.live_objects(); + { + let result = growing(100); rt.put_n(*result); rt.put_c(32); + int* slot = rt.new(int), replacement = rt.new(int); *replacement = 7; + rt.free(slot); slot = replacement; rt.put_n(*slot); rt.put_c(32); + rt.free(slot); slot = rt.new(int); *slot = 9; rt.put_n(*slot); rt.put_c(32); + } + rt.gc(); rt.put_n(rt.live_objects() - base); rt.put_c(10); +} |
