Implement non-internal ivecs

Vectors are now similar to our old, pre-internal vectors, except that
they are uniquely owned, not refcounted.

Their name should probably change too, then. I've renamed them to vec
in the runtime, will do so throughout the compiler later.
This commit is contained in:
Marijn Haverbeke 2011-08-25 10:18:02 +02:00
parent 855e0a4713
commit c9c5ee252a
27 changed files with 493 additions and 1554 deletions

View file

@ -1,28 +1,28 @@
import rusti::ivec_len;
import rusti::vec_len;
native "rust-intrinsic" mod rusti {
fn ivec_len<T>(v: &[T]) -> uint;
fn vec_len<T>(v: &[T]) -> uint;
}
fn main() {
let v: [int] = [];
assert (ivec_len(v) == 0u); // zero-length
assert (vec_len(v) == 0u); // zero-length
let x = [1, 2];
assert (ivec_len(x) == 2u); // on stack
assert (vec_len(x) == 2u); // on stack
let y = [1, 2, 3, 4, 5];
assert (ivec_len(y) == 5u); // on heap
assert (vec_len(y) == 5u); // on heap
v += [];
assert (ivec_len(v) == 0u); // zero-length append
assert (vec_len(v) == 0u); // zero-length append
x += [3];
assert (ivec_len(x) == 3u); // on-stack append
assert (vec_len(x) == 3u); // on-stack append
y += [6, 7, 8, 9];
assert (ivec_len(y) == 9u); // on-heap append
assert (vec_len(y) == 9u); // on-heap append
let vv = v + v;
assert (ivec_len(vv) == 0u); // zero-length add
assert (vec_len(vv) == 0u); // zero-length add
let xx = x + [4];
assert (ivec_len(xx) == 4u); // on-stack add
assert (vec_len(xx) == 4u); // on-stack add
let yy = y + [10, 11];
assert (ivec_len(yy) == 11u); // on-heap add
assert (vec_len(yy) == 11u); // on-heap add
}