/* $Header$ */
/*	S T R U C T U R E - S T O R A G E  D E F I N I T I O N S	*/

/*	Storage allocation is one of the most expensive operations in
	the compiler and consequently much thought and experimentation
	has gone into it.  To simplify the hooking in of new super-fancy
	algorithms, all allocating and freeing of storage for structs
	goes through the macros
		st_alloc(&head, size)
		st_free(ptr, head, size)
	which, hopefully, convey enough information.
*/

extern char *head_alloc();

#define	st_alloc(headp, size)		head_alloc((char **)headp, size)

#ifndef	BOTCH_FREE
#define	st_free(ptr, head, size)	(ptr->next = head, head = ptr)
#else	def BOTCH_FREE
#define	st_free(ptr, head, size)	(botch((char *)(ptr), size), \
						ptr->next = head, head = ptr)
#endif	BOTCH_FREE