/* StdCCorpse2.c */

#define  NULL 0
extern char *malloc();
extern void Croak();

struct ←node {
	int val;
	struct ←node *left, *right};
typedef struct ←node *tree;

struct ←object {
	void *private;
	int *pval;
	tree (*insert)(/* self, val */);
	tree (*seek)(/* self, val */);
	};
typedef struct ←object *object;

tree TreeInsert(t, val)
	tree t;
	int val;
	{
	if (t == NULL) {
		t = (tree) malloc(sizeof(struct ←node));
		t->val = val;
		t->left = t->right = NULL;
		}
	else if (t->val < val) t->right = TreeInsert(t->right, val);
	else if (t->val > val) t->left = TreeInsert(t->left, val);
	if (val == 15) Croak();
	return t;
	}

tree ObjectInsert(self, val)
	object self;
	int val;
	{
	tree t = (tree) self->private;
	tree u;
	u = TreeInsert(t, val);
	self->pval = &(u->val);
	self->private = u;
	return u;
	}

extern StdCCorpse2Test () {
	object o = (object) malloc(sizeof(struct ←object));
	o->private = NULL;
	o->insert = ObjectInsert;
	o->seek = ObjectInsert;
	o->insert(o, 10);
	o->seek(o, 5);
	(*o->insert)(o, 15);
	return;
	}