// -*-Mode: C++;-*-
//
// See copyright.h for copyright notice and limitation of liability
// and disclaimer of warranty provisions.
//
class Entry ;
using Symbol = Entry *;
inline std::ostream &operator<<
//
// There are three kinds of string table entries:
// a true string, an string representation of an identifier, and
// a string representation of an integer.
//
// Having separate tables is convenient for code generation. Different
// data definitions are generated for string constants (StringEntry) and
// integer constants (IntEntry). Identifiers (IdEntry) don't produce
// static data definitions.
//
// code_def and code_ref are used by the code to produce definitions and
// references (respectively) to constants.
//
class StringEntry : public Entry ;
class IdEntry : public Entry ;
class IntEntry : public Entry ;
//////////////////////////////////////////////////////////////////////////
//
// String Tables
//
//////////////////////////////////////////////////////////////////////////
template <typename Entry> class StringTable ;
class IdTable : public StringTable<IdEntry> ;
class StrTable : public StringTable<StringEntry> ;
class IntTable : public StringTable<IntEntry> ;
extern IdTable idtable;
extern IntTable inttable;
extern StrTable stringtable;