/*
 * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
 * See the copyright notice in the ACK home directory, in the file "Copyright".
 */
/* $Id$ */
/* TYPE DESCRIPTOR */

#include	"nofloat.h"
#include	"nobitfield.h"
#include	"dbsymtab.h"

struct type	{
	struct type *next;	/* used only with ARRAY */
	short tp_fund;		/* fundamental type */
	char tp_unsigned;
	int tp_align;
	arith tp_size;		/* -1 if declared but not defined */
	struct idf *tp_idf;	/* name of STRUCT, UNION or ENUM */
	struct sdef *tp_sdef;	/* to first selector */
	struct type *tp_up;	/* from FIELD, POINTER, ARRAY
					or FUNCTION to fund. */
	struct field *tp_field;	/* field descriptor if fund == FIELD	*/
	struct type *tp_pointer;/* to POINTER */
	struct type *tp_array;	/* to ARRAY */
	struct type *tp_function;/* to FUNCTION */
#ifdef DBSYMTAB
	int tp_dbindex;
#endif
};

extern struct type
	*create_type(), *standard_type(), *construct_type(), *pointer_to(),
	*array_of(), *function_of();

#ifndef NOBITFIELD
extern struct type *field_of();
#endif /* NOBITFIELD */

extern struct type
	*char_type, *uchar_type,
	*short_type, *ushort_type,
	*word_type, *uword_type,
	*int_type, *uint_type,
	*long_type, *ulong_type,
#ifndef NOFLOAT
	*float_type, *double_type,
#endif /* NOFLOAT */
	*void_type, *label_type,
	*string_type, *funint_type, *error_type;

extern struct type *pa_type;	/* type.c	*/

extern arith size_of_type(), align();

/* ALLOCDEF "type" 20 */
