typedef struct { char *addr; long type; } object; object bar (object blah) { abort(); } object foo (object x, object y) { object z = *(object*)(x.addr); if (z.type & 64) { y = *(object*)(z.addr+sizeof(object)); z = *(object*)(z.addr); if (z.type & 64) y = bar(y); } return y; } int nil; object cons1[2] = { {(char *) &nil, 0}, {(char *) &nil, 0} }; object cons2[2] = { {(char *) &cons1, 64}, {(char *) &nil, 0} }; main() { object x = {(char *) &cons2, 64}; object y = {(char *) &nil, 0}; object three = foo(x,y); return 0; }