Changes in src/SymTab/Indexer.h [e67991f:114bde6]
- File:
-
- 1 edited
-
src/SymTab/Indexer.h (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/SymTab/Indexer.h
re67991f r114bde6 34 34 virtual ~Indexer(); 35 35 36 // when using an indexer manually (e.g., within a mutator traversal), it is necessary to 36 // when using an indexer manually (e.g., within a mutator traversal), it is necessary to 37 37 // tell the indexer explicitly when scopes begin and end 38 38 void enterScope(); … … 40 40 41 41 struct IdData { 42 constDeclarationWithType * id = nullptr;43 constExpression * baseExpr = nullptr; // WithExpr42 DeclarationWithType * id = nullptr; 43 Expression * baseExpr = nullptr; // WithExpr 44 44 45 45 /// non-null if this declaration is deleted 46 const Declaration* deleteStmt = nullptr;46 BaseSyntaxNode * deleteStmt = nullptr; 47 47 /// scope of identifier 48 48 unsigned long scope = 0; … … 50 50 // NOTE: shouldn't need either of these constructors, but gcc-4 does not properly support initializer lists with default members. 51 51 IdData() = default; 52 IdData( 53 const DeclarationWithType * id, const Expression * baseExpr, const Declaration* deleteStmt,54 unsigned long scope ) 52 IdData( 53 DeclarationWithType * id, Expression * baseExpr, BaseSyntaxNode * deleteStmt, 54 unsigned long scope ) 55 55 : id( id ), baseExpr( baseExpr ), deleteStmt( deleteStmt ), scope( scope ) {} 56 IdData( const IdData& o, const Declaration* deleteStmt )56 IdData( const IdData& o, BaseSyntaxNode * deleteStmt ) 57 57 : id( o.id ), baseExpr( o.baseExpr ), deleteStmt( deleteStmt ), scope( o.scope ) {} 58 58 … … 61 61 62 62 /// Gets all declarations with the given ID 63 void lookupId( const std::string & id, std::list< IdData > &out ) const;63 void lookupId( const std::string &id, std::list< IdData > &out ) const; 64 64 /// Gets the top-most type declaration with the given ID 65 const NamedTypeDecl * lookupType( const std::string &id ) const;65 NamedTypeDecl *lookupType( const std::string &id ) const; 66 66 /// Gets the top-most struct declaration with the given ID 67 const StructDecl * lookupStruct( const std::string &id ) const;67 StructDecl *lookupStruct( const std::string &id ) const; 68 68 /// Gets the top-most enum declaration with the given ID 69 const EnumDecl * lookupEnum( const std::string &id ) const;69 EnumDecl *lookupEnum( const std::string &id ) const; 70 70 /// Gets the top-most union declaration with the given ID 71 const UnionDecl * lookupUnion( const std::string &id ) const;71 UnionDecl *lookupUnion( const std::string &id ) const; 72 72 /// Gets the top-most trait declaration with the given ID 73 const TraitDecl * lookupTrait( const std::string &id ) const;73 TraitDecl *lookupTrait( const std::string &id ) const; 74 74 75 75 /// Gets the type declaration with the given ID at global scope 76 const NamedTypeDecl * globalLookupType( const std::string &id ) const;76 NamedTypeDecl *globalLookupType( const std::string &id ) const; 77 77 /// Gets the struct declaration with the given ID at global scope 78 const StructDecl * globalLookupStruct( const std::string &id ) const;78 StructDecl *globalLookupStruct( const std::string &id ) const; 79 79 /// Gets the union declaration with the given ID at global scope 80 const UnionDecl * globalLookupUnion( const std::string &id ) const;80 UnionDecl *globalLookupUnion( const std::string &id ) const; 81 81 /// Gets the enum declaration with the given ID at global scope 82 const EnumDecl * globalLookupEnum( const std::string &id ) const;82 EnumDecl *globalLookupEnum( const std::string &id ) const; 83 83 84 void addId( const DeclarationWithType * decl, constExpression * baseExpr = nullptr );85 void addDeletedId( const DeclarationWithType * decl, const Declaration* deleteStmt );84 void addId( DeclarationWithType * decl, Expression * baseExpr = nullptr ); 85 void addDeletedId( DeclarationWithType * decl, BaseSyntaxNode * deleteStmt ); 86 86 87 void addType( const NamedTypeDecl *decl );88 void addStruct( const std::string & id );89 void addStruct( const StructDecl *decl );90 void addEnum( const EnumDecl *decl );91 void addUnion( const std::string & id );92 void addUnion( const UnionDecl *decl );93 void addTrait( const TraitDecl *decl );87 void addType( NamedTypeDecl *decl ); 88 void addStruct( const std::string &id ); 89 void addStruct( StructDecl *decl ); 90 void addEnum( EnumDecl *decl ); 91 void addUnion( const std::string &id ); 92 void addUnion( UnionDecl *decl ); 93 void addTrait( TraitDecl *decl ); 94 94 95 95 /// adds all of the IDs from WithStmt exprs 96 void addWith( const std::list< Expression * > & withExprs, const Declaration* withStmt );96 void addWith( std::list< Expression * > & withExprs, BaseSyntaxNode * withStmt ); 97 97 98 98 /// convenience function for adding a list of Ids to the indexer … … 103 103 104 104 /// convenience function for adding all of the declarations in a function type to the indexer 105 void addFunctionType( constFunctionType * ftype );105 void addFunctionType( FunctionType * ftype ); 106 106 107 107 private: 108 /// Wraps a Decl * with a scope108 /// Wraps a Decl* with a scope 109 109 template<typename Decl> 110 110 struct Scoped { 111 const Decl* decl; ///< declaration111 Decl* decl; ///< declaration 112 112 unsigned long scope; ///< scope of this declaration 113 113 114 Scoped( const Decl* d, unsigned long s) : decl(d), scope(s) {}114 Scoped(Decl* d, unsigned long s) : decl(d), scope(s) {} 115 115 }; 116 116 … … 140 140 141 141 /// Gets the indexer at the given scope 142 const Indexer * atScope( unsigned long scope ) const;142 const Indexer* atScope( unsigned long scope ) const; 143 143 144 /// Removes matching autogenerated constructors and destructors so that they will not be 144 /// Removes matching autogenerated constructors and destructors so that they will not be 145 145 /// selected. If returns false, passed decl should not be added. 146 bool removeSpecialOverrides( IdData & decl, MangleTable::Ptr& mangleTable );146 bool removeSpecialOverrides( IdData& decl, MangleTable::Ptr& mangleTable ); 147 147 148 148 /// Options for handling identifier conflicts … … 152 152 Delete ///< Delete the earlier version with the delete statement 153 153 } mode; 154 const Declaration* deleteStmt; ///< Statement that deletes this expression154 BaseSyntaxNode * deleteStmt; ///< Statement that deletes this expression 155 155 156 156 private: 157 157 OnConflict() : mode(Error), deleteStmt(nullptr) {} 158 OnConflict( const Declaration* d ) : mode(Delete), deleteStmt(d) {}158 OnConflict( BaseSyntaxNode * d ) : mode(Delete), deleteStmt(d) {} 159 159 public: 160 160 OnConflict( const OnConflict& ) = default; 161 161 162 162 static OnConflict error() { return {}; } 163 static OnConflict deleteWith( const Declaration* d ) { return { d }; }163 static OnConflict deleteWith( BaseSyntaxNode * d ) { return { d }; } 164 164 }; 165 165 166 166 /// true if the existing identifier conflicts with the added identifier 167 167 bool addedIdConflicts( 168 const IdData & existing, const DeclarationWithType * added, OnConflict handleConflicts,169 const Declaration* deleteStmt );168 const IdData& existing, DeclarationWithType * added, OnConflict handleConflicts, 169 BaseSyntaxNode * deleteStmt ); 170 170 171 171 /// common code for addId, addDeletedId, etc. 172 void addId(const DeclarationWithType * decl, OnConflict handleConflicts, 173 const Expression * baseExpr = nullptr, const Declaration * deleteStmt = nullptr ); 172 void addId( 173 DeclarationWithType * decl, OnConflict handleConflicts, 174 Expression * baseExpr = nullptr, BaseSyntaxNode * deleteStmt = nullptr ); 174 175 175 176 /// adds all of the members of the Aggregate (addWith helper) 176 void addMembers( const AggregateDecl * aggr, constExpression * expr, OnConflict handleConflicts );177 void addMembers( AggregateDecl * aggr, Expression * expr, OnConflict handleConflicts ); 177 178 178 179 /// returns true if there exists a declaration with C linkage and the given name with the same mangled name 179 bool hasCompatibleCDecl( const std::string & id, const std::string &mangleName ) const;180 bool hasCompatibleCDecl( const std::string &id, const std::string &mangleName ) const; 180 181 /// returns true if there exists a declaration with C linkage and the given name with a different mangled name 181 bool hasIncompatibleCDecl( const std::string & id, const std::string &mangleName ) const;182 bool hasIncompatibleCDecl( const std::string &id, const std::string &mangleName ) const; 182 183 }; 183 184 } // namespace SymTab
Note:
See TracChangeset
for help on using the changeset viewer.