#include <stdarg.h>

typedef void *oop;
struct __closure
{
	oop obj;
	struct __closure *(*bind)( oop, oop);
	struct __closure *(*method)( oop, oop, oop, ...);

};

struct __closure *_libid;

__inline oop _send( oop msg, oop rcv, ...)
{
  va_list ap;
  register oop _r = rcv;
  struct __closure *_c;
  oop ret;

  va_start( ap, rcv);

  _c = (struct __closure *) _libid->bind( msg, _r);

  ret = (_c->method)( (oop) _c, _r, _r, ap);
  
  va_end( ap);

  return ret;
}

