/* SymbolTable.h */

#ifndef Included_SymbolTable_h
#define Included_SymbolTable_h

/* SymbolTable module depends on */
/* MiscInfo.h */
/* Audit */
/* Debug */
/* Definition */
/* SymbolTableEntry */
/* TrashTracker */
/* Memory */
/* DataMunging */

struct SymbolTableRec;
typedef struct SymbolTableRec SymbolTableRec;

/* forwards */
struct TrashTrackRec;
struct SymbolRec;

/* all memory allocated through this module is from TrashTracker */

/* create a new symbol table */
SymbolTableRec*			NewSymbolTable(struct TrashTrackRec* TrashTracker);

/* create a new symbol table lexical level */
MyBoolean						IncrementSymbolTableLevel(SymbolTableRec* SymbolTable);

/* drop the current symbol table lexical level */
void								DecrementSymbolTableLevel(SymbolTableRec* SymbolTable);

/* result codes from adding a symbol to the symbol table */
typedef enum
	{
		eAddSymbolNoErr EXECUTE(= -5152),
		eAddSymbolAlreadyExists,
		eAddSymbolNoMemory
	} AddSymbolType;

/* add symbol table entry to the symbol table.  returns a result code */
AddSymbolType				AddSymbolToTable(SymbolTableRec* SymbolTable,
											struct SymbolRec* SymbolToAdd);

/* get a symbol from the symboldflksakdo table */
/* it returns NIL if the entry was not found. */
struct SymbolRec*		GetSymbolFromTable(SymbolTableRec* SymbolTable, char* NameString,
											long NameStringLength);

#endif
