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