aboutsummaryrefslogtreecommitdiff
path: root/docs/history/17-o3-boundaries/code/tests/o3fat.zc
blob: 313c87cc592148fd0eebabe15feaca8203f5e5b2 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// o3 objects reaching normal code get their types: through a return (all the way down the list), an assignment, a store into a field
struct node { int v; *node next; };
struct box { [3]*node slots; int n; };
unchecked o3 *node build(int n)
{
	*node head = 0;
	for (int i = 0; i < n; i++) { *node k = new(node); k.v = i; k.next = head; head = k; }
	return head;
}
unchecked fn main()
{
	*node l = build(5);
	tprint(typeof_obj(l)); putc(' '); tprint(typeof_obj(l.next.next.next)); putc(' ');
	putn(l.next.v); putc(' ');
	*box b = 0;
	o3 { b = new(box); b.slots[1] = new(node); b.n = 2; }
	tprint(typeof_obj(b)); putc(' '); tprint(typeof_obj(b.slots[1])); putc(' ');
	*int raw = 0;
	o3 { raw = new(int, 6); }
	tprint(typeof_obj(raw)); putc(10);
	return 0;
}