// Name.hh
|
// Name.hh
|
|
|
#include "List.hh"
|
#include "List.hh"
|
class TypeName;
|
class TypeName;
|
class Name;
|
class Name;
|
|
|
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
class Name
|
class Name
|
{
|
{
|
public:
|
public:
|
Name(const char * n, Name * t, TypeName * d, int spos)
|
Name(const char * n, Name * t, TypeName * d, int spos)
|
: name(n),
|
: name(n),
|
tail(t),
|
tail(t),
|
decl(d),
|
decl(d),
|
stack_position(spos)
|
stack_position(spos)
|
{}
|
{}
|
|
|
static TypeName * FindType(const char * na);
|
static TypeName * FindType(const char * na);
|
static int FindPos(const char * na);
|
static int FindPos(const char * na);
|
static bool FindEnum(const char * na, int & value);
|
static bool FindEnum(const char * na, int & value);
|
static void AddExtern(const char * na, TypeName * decl);
|
static void AddExtern(const char * na, TypeName * decl);
|
static void AddStatic(const char * na, TypeName * decl);
|
static void AddStatic(const char * na, TypeName * decl);
|
static void AddEnum(const char * na, int value);
|
static void AddEnum(const char * na, int value);
|
static void AddLocal(const char * na, TypeName * decl);
|
static void AddLocal(const char * na, TypeName * decl);
|
static void AddAuto(const char * na, TypeName * decl, int spos = 0);
|
static void AddAuto(const char * na, TypeName * decl, int spos = 0);
|
static void SetAutoPos(const char * na, int spos);
|
static void SetAutoPos(const char * na, int spos);
|
static void AutoToLocal();
|
static void AutoToLocal();
|
static void PrintAll(FILE * out);
|
static void PrintAll(FILE * out);
|
|
|
static void RemoveAuto();
|
static void RemoveAuto();
|
static bool ContextIsEmpty() { return (autos == 0); };
|
static bool ContextIsEmpty() { return (autos == 0); };
|
static void PushContext();
|
static void PushContext();
|
static void PopContext();
|
static void PopContext();
|
|
|
void Print(FILE * out);
|
void Print(FILE * out);
|
|
|
private:
|
private:
|
const char * name;
|
const char * name;
|
Name * tail;
|
Name * tail;
|
TypeName * decl;
|
TypeName * decl;
|
int stack_position;
|
int stack_position;
|
|
|
static Name * FindDeclared(const char * na);
|
static Name * FindDeclared(const char * na);
|
|
|
static Name * externs;
|
static Name * externs;
|
static Name * statics;
|
static Name * statics;
|
static Name * locals;
|
static Name * locals;
|
static Name * enums;
|
static Name * enums;
|
static Name * autos;
|
static Name * autos;
|
};
|
};
|
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
class TypedefName
|
class TypedefName
|
{
|
{
|
public:
|
public:
|
TypedefName(const char * n, TypedefName * t, TypeName * d)
|
TypedefName(const char * n, TypedefName * t, TypeName * d)
|
: name(n),
|
: name(n),
|
tail(t),
|
tail(t),
|
decl(d)
|
decl(d)
|
{}
|
{}
|
|
|
static bool IsDefined(const char * na);
|
static bool IsDefined(const char * na);
|
static TypeName * Find(const char * na);
|
static TypeName * Find(const char * na);
|
static void Add(const char * na, TypeName * decl);
|
static void Add(const char * na, TypeName * decl);
|
|
|
private:
|
private:
|
const char * name;
|
const char * name;
|
TypedefName * tail;
|
TypedefName * tail;
|
TypeName * decl;
|
TypeName * decl;
|
|
|
static TypedefName * typedefs;
|
static TypedefName * typedefs;
|
};
|
};
|
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
class StructName
|
class StructName
|
{
|
{
|
public:
|
public:
|
StructName(const char * n, StructName * t, StructDeclarationList * sdl)
|
StructName(const char * n, StructName * t, StructDeclarationList * sdl)
|
: name(n),
|
: name(n),
|
tail(t),
|
tail(t),
|
sdlist(sdl)
|
sdlist(sdl)
|
{}
|
{}
|
|
|
static bool IsDefined(const char * na);
|
static bool IsDefined(const char * na);
|
static StructDeclarationList * Find(const char * na);
|
static StructDeclarationList * Find(const char * na);
|
static void Add(const char * na, StructDeclarationList * sdl);
|
static void Add(const char * na, StructDeclarationList * sdl);
|
|
|
private:
|
private:
|
const char * name;
|
const char * name;
|
StructName * tail;
|
StructName * tail;
|
StructDeclarationList * sdlist;
|
StructDeclarationList * sdlist;
|
|
|
static StructName * structs;
|
static StructName * structs;
|
};
|
};
|
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
|
|