1typedef struct { char *addr; long type; } object;
2
3object bar (object blah)
4{
5  abort();
6}
7
8object foo (object x, object y)
9{
10  object z = *(object*)(x.addr);
11  if (z.type & 64)
12    {
13      y = *(object*)(z.addr+sizeof(object));
14      z = *(object*)(z.addr);
15      if (z.type & 64)
16        y = bar(y);
17    }
18  return y;
19}
20
21int nil;
22object cons1[2] = { {(char *) &nil, 0}, {(char *) &nil, 0} };
23object cons2[2] = { {(char *) &cons1, 64}, {(char *) &nil, 0} };
24
25main()
26{
27  object x = {(char *) &cons2, 64};
28  object y = {(char *) &nil, 0};
29  object three = foo(x,y);
30  return 0;
31}
32