1 typedef struct { char *addr; long type; } object; 2 3 object bar (object blah) 4 { 5 abort(); 6 } 7 8 object 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 21 int nil; 22 object cons1[2] = { {(char *) &nil, 0}, {(char *) &nil, 0} }; 23 object cons2[2] = { {(char *) &cons1, 64}, {(char *) &nil, 0} }; 24 25 main() 26 { 27 object x = {(char *) &cons2, 64}; 28 object y = {(char *) &nil, 0}; 29 object three = foo(x,y); 30 return 0; 31 } 32