From dc1792c78ac40a05c3ab00d4da5574ba03f19769 Mon Sep 17 00:00:00 2001 From: Argyrios Kyrtzidis Date: Wed, 29 Jul 2009 23:40:21 +0000 Subject: [PATCH] Use an IdentifierTable for names used for Entities. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77537 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Index/Entity.cpp | 10 +++++----- lib/Index/EntityImpl.h | 13 +++++-------- lib/Index/ProgramImpl.h | 9 ++++++--- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/lib/Index/Entity.cpp b/lib/Index/Entity.cpp index d33110074f..8c7c8d0ef5 100644 --- a/lib/Index/Entity.cpp +++ b/lib/Index/Entity.cpp @@ -70,9 +70,8 @@ Entity EntityGetter::VisitNamedDecl(NamedDecl *D) { if (!II) return Entity(); - EntityImpl::IdEntryTy *Id = - &Prog.getIdents().GetOrCreateValue(II->getName(), - II->getName() + II->getLength()); + IdentifierInfo *Id = &Prog.getIdents().get(II->getName(), + II->getName() + II->getLength()); unsigned IdNS = D->getIdentifierNamespace(); llvm::FoldingSetNodeID ID; @@ -117,7 +116,8 @@ Decl *EntityImpl::getDecl(ASTContext &AST) { if (!DC) return 0; // Couldn't get the parent context. - IdentifierInfo &II = AST.Idents.get(Id->getKeyData()); + IdentifierInfo &II = AST.Idents.get(Id->getName(), + Id->getName() + Id->getLength()); DeclContext::lookup_result Res = DC->lookup(DeclarationName(&II)); for (DeclContext::lookup_iterator I = Res.first, E = Res.second; I!=E; ++I) { @@ -136,7 +136,7 @@ Entity EntityImpl::get(Decl *D, ProgramImpl &Prog) { } std::string EntityImpl::getPrintableName() { - return std::string(Id->getKeyData(), Id->getKeyData() + Id->getKeyLength()); + return Id->getName(); } //===----------------------------------------------------------------------===// diff --git a/lib/Index/EntityImpl.h b/lib/Index/EntityImpl.h index 3f09f80fc1..d28936ee2c 100644 --- a/lib/Index/EntityImpl.h +++ b/lib/Index/EntityImpl.h @@ -19,23 +19,20 @@ #include "llvm/ADT/StringSet.h" namespace clang { + class IdentifierInfo; namespace idx { class ProgramImpl; class EntityImpl : public llvm::FoldingSetNode { -public: - typedef llvm::StringMapEntry IdEntryTy; - -private: Entity Parent; - IdEntryTy *Id; + IdentifierInfo *Id; /// \brief Identifier namespace. unsigned IdNS; public: - EntityImpl(Entity parent, IdEntryTy *id, unsigned idNS) + EntityImpl(Entity parent, IdentifierInfo *id, unsigned idNS) : Parent(parent), Id(id), IdNS(idNS) { } /// \brief Find the Decl that can be referred to by this entity. @@ -50,8 +47,8 @@ public: void Profile(llvm::FoldingSetNodeID &ID) const { Profile(ID, Parent, Id, IdNS); } - static void Profile(llvm::FoldingSetNodeID &ID, Entity Parent, IdEntryTy *Id, - unsigned IdNS) { + static void Profile(llvm::FoldingSetNodeID &ID, Entity Parent, + IdentifierInfo *Id, unsigned IdNS) { ID.AddPointer(Parent.getAsOpaquePtr()); ID.AddPointer(Id); ID.AddInteger(IdNS); diff --git a/lib/Index/ProgramImpl.h b/lib/Index/ProgramImpl.h index 39fc184677..b962a2d327 100644 --- a/lib/Index/ProgramImpl.h +++ b/lib/Index/ProgramImpl.h @@ -15,6 +15,8 @@ #define LLVM_CLANG_INDEX_PROGRAMIMPL_H #include "EntityImpl.h" +#include "clang/Basic/IdentifierTable.h" +#include "clang/Basic/LangOptions.h" namespace clang { @@ -27,17 +29,18 @@ public: private: EntitySetTy Entities; - llvm::StringSet<> Idents; llvm::BumpPtrAllocator BumpAlloc; + + IdentifierTable Identifiers; ProgramImpl(const ProgramImpl&); // do not implement ProgramImpl &operator=(const ProgramImpl &); // do not implement public: - ProgramImpl() { } + ProgramImpl() : Identifiers(LangOptions()) { } EntitySetTy &getEntities() { return Entities; } - llvm::StringSet<> &getIdents() { return Idents; } + IdentifierTable &getIdents() { return Identifiers; } void *Allocate(unsigned Size, unsigned Align = 8) { return BumpAlloc.Allocate(Size, Align); -- 2.40.0