/* %Z%%M% %I% %E% */

/*
 * Copyright (c) 1992, 1995 by Wayne C. Gramlich.
 * All rights reserved.
 *
 * Permission to use, copy, modify, distribute, and sell this software
 * for any purpose is hereby granted without fee provided that the above
 * copyright notice and this permission are retained.  The author makes
 * no representations about the suitability of this software for any purpose.
 * It is provided "as is" without express or implied warranty.
 */

/* This file defines the need data structures: */

#ifndef NEED_DEFS_H
#define NEED_DEFS_H

#ifndef NEED_EXPORTS_H
#include "need_exports.h"
#endif

#ifndef TYPE_TYPES_H
#include "type_types.h"
#endif

union Need_value_union {
	Type_ref	object;
	Type_proto	routine;
};

struct Need_entry_struct {
	Str		name;		/* Routine/Object name */
	Type_ref	type_ref;	/* Routine/Object type */
	Need_entry_type	type;		/* Routine or Object flag */
	Need_value	value;		/* Value of routine or object */
};

struct Need_table_struct {
	Vec(Need_entry)	block_entrys;	/* List of parameterized Need_entry's */
	Heap		heap;		/* Heap */
	Need_entry	key;		/* Temporary key */
	Str		name;		/* Routine name */
	Vec(Need_entry)	static_entrys;	/* List of static Need_entry's */
	Routine		routine;	/* Back pointer to routine */
	Table(Need_entry, Need_entry) table; /* Table of Need_entry's */
	Type_ref	type_ref;	/* Routine type_ref */
	Type_tables	type_tables;	/* Type tables */
};

#endif /* NEED_DEFS_H */
