Changes in src/SymTab/Indexer.h [afc1045:2a4b088]
- File:
-
- 1 edited
-
src/SymTab/Indexer.h (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/SymTab/Indexer.h
rafc1045 r2a4b088 9 9 // Author : Richard C. Bilson 10 10 // Created On : Sun May 17 21:38:55 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Wed Mar 2 17:34:14 201613 // Update Count : 611 // Last Modified By : Rob Schluntz 12 // Last Modified On : Thu Sep 17 16:05:38 2015 13 // Update Count : 5 14 14 // 15 15 … … 21 21 22 22 #include "SynTree/Visitor.h" 23 #include "IdTable.h" 24 #include "AggregateTable.h" 25 #include "TypeTable.h" 23 26 24 27 namespace SymTab { … … 26 29 public: 27 30 Indexer( bool useDebug = false ); 28 29 Indexer( const Indexer &that );30 Indexer( Indexer &&that );31 31 virtual ~Indexer(); 32 Indexer& operator= ( const Indexer &that );33 Indexer& operator= ( Indexer &&that );34 32 35 33 //using Visitor::visit; … … 41 39 virtual void visit( UnionDecl *aggregateDecl ); 42 40 virtual void visit( EnumDecl *aggregateDecl ); 43 virtual void visit( TraitDecl *aggregateDecl );41 virtual void visit( ContextDecl *aggregateDecl ); 44 42 45 43 virtual void visit( CompoundStmt *compoundStmt ); … … 59 57 virtual void visit( UntypedOffsetofExpr *offsetofExpr ); 60 58 virtual void visit( OffsetofExpr *offsetofExpr ); 61 virtual void visit( OffsetPackExpr *offsetPackExpr );62 59 virtual void visit( AttrExpr *attrExpr ); 63 60 virtual void visit( LogicalExpr *logicalExpr ); … … 70 67 virtual void visit( UntypedValofExpr *valofExpr ); 71 68 72 virtual void visit( TraitInstType *contextInst );69 virtual void visit( ContextInstType *contextInst ); 73 70 virtual void visit( StructInstType *contextInst ); 74 71 virtual void visit( UnionInstType *contextInst ); … … 81 78 void leaveScope(); 82 79 83 /// Gets all declarations with the given ID 84 void lookupId( const std::string &id, std::list< DeclarationWithType* > &out ) const; 85 /// Gets the top-most type declaration with the given ID 80 void lookupId( const std::string &id, std::list< DeclarationWithType* >& ) const; 81 DeclarationWithType* lookupId( const std::string &id) const; 86 82 NamedTypeDecl *lookupType( const std::string &id ) const; 87 /// Gets the top-most struct declaration with the given ID88 83 StructDecl *lookupStruct( const std::string &id ) const; 89 /// Gets the top-most enum declaration with the given ID90 84 EnumDecl *lookupEnum( const std::string &id ) const; 91 /// Gets the top-most union declaration with the given ID92 85 UnionDecl *lookupUnion( const std::string &id ) const; 93 /// Gets the top-most trait declaration with the given ID 94 TraitDecl *lookupTrait( const std::string &id ) const; 86 ContextDecl *lookupContext( const std::string &id ) const; 95 87 96 88 void print( std::ostream &os, int indent = 0 ) const; 97 89 private: 98 /// looks up a specific mangled ID at the given scope 99 DeclarationWithType *lookupIdAtScope( const std::string &id, const std::string &mangleName, unsigned long scope ) const; 100 /// returns true if there exists a declaration with C linkage and the given name with a different mangled name 101 bool hasIncompatibleCDecl( const std::string &id, const std::string &mangleName ) const; 102 // equivalents to lookup functions that only look at tables at scope `scope` (which should be >= tables->scope) 103 NamedTypeDecl *lookupTypeAtScope( const std::string &id, unsigned long scope ) const; 104 StructDecl *lookupStructAtScope( const std::string &id, unsigned long scope ) const; 105 EnumDecl *lookupEnumAtScope( const std::string &id, unsigned long scope ) const; 106 UnionDecl *lookupUnionAtScope( const std::string &id, unsigned long scope ) const; 107 TraitDecl *lookupTraitAtScope( const std::string &id, unsigned long scope ) const; 108 109 void addId( DeclarationWithType *decl ); 110 void addType( NamedTypeDecl *decl ); 111 void addStruct( const std::string &id ); 112 void addStruct( StructDecl *decl ); 113 void addEnum( EnumDecl *decl ); 114 void addUnion( const std::string &id ); 115 void addUnion( UnionDecl *decl ); 116 void addTrait( TraitDecl *decl ); 117 118 struct Impl; 119 Impl *tables; ///< Copy-on-write instance of table data structure 120 unsigned long scope; ///< Scope index of this pointer 121 bool doDebug; ///< Display debugging trace? 122 123 /// Takes a new ref to a table (returns null if null) 124 static Impl *newRef( Impl *toClone ); 125 /// Clears a ref to a table (does nothing if null) 126 static void deleteRef( Impl *toFree ); 127 128 /// Ensures that tables variable is writable (i.e. allocated, uniquely owned by this Indexer, and at the current scope) 129 void makeWritable(); 90 IdTable idTable; 91 TypeTable typeTable; 92 StructTable structTable; 93 EnumTable enumTable; 94 UnionTable unionTable; 95 ContextTable contextTable; 96 97 bool doDebug; // display debugging trace 130 98 }; 131 99 } // namespace SymTab
Note:
See TracChangeset
for help on using the changeset viewer.