#ifndef SYMTAB_TYPETABLE_H #define SYMTAB_TYPETABLE_H #include #include #include #include #include #include "StackTable.h" #include "SynTree/Declaration.h" namespace SymTab { class TypeTableConflictFunction : public std::binary_function< NamedTypeDecl *, NamedTypeDecl *, NamedTypeDecl * > { public: NamedTypeDecl *operator()( NamedTypeDecl *existing, NamedTypeDecl *added ) { if ( existing->get_base() == 0 ) { return added; } else if( added->get_base() == 0 ) { return existing; } else { throw SemanticError( "redeclaration of ", added ); } assert( false ); return 0; } }; typedef StackTable< NamedTypeDecl, TypeTableConflictFunction > TypeTable; } // SymTab #endif // SYMTAB_TYPETABLE_H