void *stack[STACK_SIZE];
void **sp = stack;

void gc_cb(excCallbackTag tag, void *cb_data,
           void **try_data)
{
  switch (tag) {
  case excBeginCallback:
    *try_data = sp;
    break;

  case excEndCallback:
  case excThrowCallback:
    if (try_data) sp = (void **) *try_data;
    else sp = stack;
    break;

  default:
    break;
  }
}

exc_install_callback(excBeginCallback
	| excEndCallback 
    | excThrowCallback, gc_cb, NULL);


