blob: 937b0f3958da0c7e84a1c12aee99c855faa2e594 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
// 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)); put_c(' '); tprint(typeof_obj(l.next.next.next)); put_c(' ');
put_n(l.next.v); put_c(' ');
box* b = 0;
o3 { b = new(box); b.slots[1] = new(node); b.n = 2; }
tprint(typeof_obj(b)); put_c(' '); tprint(typeof_obj(b.slots[1])); put_c(' ');
int* raw = 0;
o3 { raw = new(int, 6); }
tprint(typeof_obj(raw)); put_c(10);
return 0;
}
|