Changes in src/SymTab/Indexer.h [d0d9610:8884112]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/SymTab/Indexer.h
rd0d9610 r8884112 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // Indexer.h -- 7 // Indexer.h -- 8 8 // 9 9 // Author : Richard C. Bilson 10 10 // Created On : Sun May 17 21:38:55 2015 11 // Last Modified By : Rob Schluntz12 // Last Modified On : Thu Sep 17 16:05:38 201513 // Update Count : 511 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 17:34:14 2016 13 // Update Count : 6 14 14 // 15 15 … … 21 21 22 22 #include "SynTree/Visitor.h" 23 #include "IdTable.h"24 #include "AggregateTable.h"25 #include "TypeTable.h"26 23 27 24 namespace SymTab { … … 29 26 public: 30 27 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 ); 32 34 33 //using Visitor::visit;35 using Visitor::visit; 34 36 virtual void visit( ObjectDecl *objectDecl ); 35 37 virtual void visit( FunctionDecl *functionDecl ); … … 39 41 virtual void visit( UnionDecl *aggregateDecl ); 40 42 virtual void visit( EnumDecl *aggregateDecl ); 41 virtual void visit( ContextDecl *aggregateDecl );43 virtual void visit( TraitDecl *aggregateDecl ); 42 44 43 45 virtual void visit( CompoundStmt *compoundStmt ); … … 52 54 virtual void visit( MemberExpr *memberExpr ); 53 55 virtual void visit( VariableExpr *variableExpr ); 54 virtual void visit( ConstantExpr *constantExpr ); 56 virtual void visit( ConstantExpr *constantExpr ); 55 57 virtual void visit( SizeofExpr *sizeofExpr ); 58 virtual void visit( AlignofExpr *alignofExpr ); 59 virtual void visit( UntypedOffsetofExpr *offsetofExpr ); 60 virtual void visit( OffsetofExpr *offsetofExpr ); 61 virtual void visit( OffsetPackExpr *offsetPackExpr ); 56 62 virtual void visit( AttrExpr *attrExpr ); 57 63 virtual void visit( LogicalExpr *logicalExpr ); … … 64 70 virtual void visit( UntypedValofExpr *valofExpr ); 65 71 66 virtual void visit( ContextInstType *contextInst );72 virtual void visit( TraitInstType *contextInst ); 67 73 virtual void visit( StructInstType *contextInst ); 68 74 virtual void visit( UnionInstType *contextInst ); … … 75 81 void leaveScope(); 76 82 77 void lookupId( const std::string &id, std::list< DeclarationWithType* >& ) const; 78 DeclarationWithType* lookupId( const std::string &id) const; 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 79 86 NamedTypeDecl *lookupType( const std::string &id ) const; 87 /// Gets the top-most struct declaration with the given ID 80 88 StructDecl *lookupStruct( const std::string &id ) const; 89 /// Gets the top-most enum declaration with the given ID 81 90 EnumDecl *lookupEnum( const std::string &id ) const; 91 /// Gets the top-most union declaration with the given ID 82 92 UnionDecl *lookupUnion( const std::string &id ) const; 83 ContextDecl *lookupContext( const std::string &id ) const; 84 93 /// Gets the top-most trait declaration with the given ID 94 TraitDecl *lookupTrait( const std::string &id ) const; 95 85 96 void print( std::ostream &os, int indent = 0 ) const; 86 97 private: 87 IdTable idTable; 88 TypeTable typeTable; 89 StructTable structTable; 90 EnumTable enumTable; 91 UnionTable unionTable; 92 ContextTable contextTable; 93 94 bool doDebug; // display debugging trace 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, unsigned long scope ) const; 102 /// returns true if there exists a declaration with C linkage and the given name with the same mangled name 103 bool hasCompatibleCDecl( const std::string &id, const std::string &mangleName, unsigned long scope ) const; 104 // equivalents to lookup functions that only look at tables at scope `scope` (which should be >= tables->scope) 105 NamedTypeDecl *lookupTypeAtScope( const std::string &id, unsigned long scope ) const; 106 StructDecl *lookupStructAtScope( const std::string &id, unsigned long scope ) const; 107 EnumDecl *lookupEnumAtScope( const std::string &id, unsigned long scope ) const; 108 UnionDecl *lookupUnionAtScope( const std::string &id, unsigned long scope ) const; 109 TraitDecl *lookupTraitAtScope( const std::string &id, unsigned long scope ) const; 110 111 void addId( DeclarationWithType *decl ); 112 void addType( NamedTypeDecl *decl ); 113 void addStruct( const std::string &id ); 114 void addStruct( StructDecl *decl ); 115 void addEnum( EnumDecl *decl ); 116 void addUnion( const std::string &id ); 117 void addUnion( UnionDecl *decl ); 118 void addTrait( TraitDecl *decl ); 119 120 struct Impl; 121 Impl *tables; ///< Copy-on-write instance of table data structure 122 unsigned long scope; ///< Scope index of this pointer 123 bool doDebug; ///< Display debugging trace? 124 125 /// Takes a new ref to a table (returns null if null) 126 static Impl *newRef( Impl *toClone ); 127 /// Clears a ref to a table (does nothing if null) 128 static void deleteRef( Impl *toFree ); 129 130 /// Ensures that tables variable is writable (i.e. allocated, uniquely owned by this Indexer, and at the current scope) 131 void makeWritable(); 95 132 }; 96 133 } // namespace SymTab
Note:
See TracChangeset
for help on using the changeset viewer.