OpenCores
URL https://opencores.org/ocsvn/c16/c16/trunk

Subversion Repositories c16

[/] [c16/] [trunk/] [compiler/] [Name.hh] - Diff between revs 7 and 26

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 7 Rev 26
// 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;
};
};
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.