1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
// shared cons cells, a shared string, and a cycle. the collector reclaims
// them once nothing points at them. free of a shared cell does nothing.
fn main() {
let base = live_objects(), a, b, c, s, p, q, cyc, n, tri;
a = cons(1, 2);
b = cons(a, 3);
c = cons(a, 4);
put_n(car(a)); put_c(32);
put_n(cdr(a)); put_c(32);
put_n(car(car(b))); put_c(32);
put_n(cdr(c)); put_c(32);
put_n(car(b) == a); put_c(32);
put_n(is_shared(a)); put_c(32);
n = live_objects();
free(a);
put_n(live_objects() == n); put_c(32);
put_n(car(a)); put_c(32);
s = n_to_s(42);
p = cons(s, 0);
q = cons(s, 1);
put_n(s_to_n(car(p))); put_c(32);
put_n(car(p) == car(q)); put_c(32);
cyc = cons(0, 1);
cyc[0] = cyc;
put_n(cdr(cyc)); put_c(32);
put_n(car(cyc) == cyc); put_c(32);
tri = triple(5, 6, 7);
put_n(tget(tri, 1)); put_c(32);
a = 0; b = 0; c = 0; s = 0; p = 0; q = 0; cyc = 0; tri = 0;
scrub();
gc();
put_n(live_objects() - base); put_c(10);
return 0;
}
|