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  }