diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2009-07-29 23:39:52 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2009-07-29 23:39:52 +0000 |
commit | af7929664503a2398800767892d132a0667d42c7 (patch) | |
tree | 54e2aaf8d3b94540df9b8e161727e1eaad918f0d /clang/lib/Index/Indexer.cpp | |
parent | 4560276cf585666cf5fc5baa1fb046b82417cff9 (diff) | |
download | bcm5719-llvm-af7929664503a2398800767892d132a0667d42c7.tar.gz bcm5719-llvm-af7929664503a2398800767892d132a0667d42c7.zip |
Modify the Indexer class so that it can return the TranslationUnit that internal
decls originated from.
llvm-svn: 77534
Diffstat (limited to 'clang/lib/Index/Indexer.cpp')
-rw-r--r-- | clang/lib/Index/Indexer.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/clang/lib/Index/Indexer.cpp b/clang/lib/Index/Indexer.cpp index 08e367a2790..ddc22f7fbc0 100644 --- a/clang/lib/Index/Indexer.cpp +++ b/clang/lib/Index/Indexer.cpp @@ -16,6 +16,7 @@ #include "clang/Index/Entity.h" #include "clang/Index/Handlers.h" #include "clang/Index/TranslationUnit.h" +#include "clang/AST/DeclBase.h" using namespace clang; using namespace idx; @@ -39,6 +40,7 @@ public: void Indexer::IndexAST(TranslationUnit *TU) { assert(TU && "Passed null TranslationUnit"); + CtxTUMap[&TU->getASTContext()] = TU; EntityIndexer Idx(TU, Map); Prog.FindEntities(TU->getASTContext(), Idx); } @@ -46,8 +48,14 @@ void Indexer::IndexAST(TranslationUnit *TU) { void Indexer::GetTranslationUnitsFor(Entity Ent, TranslationUnitHandler &Handler) { assert(Ent.isValid() && "Expected valid Entity"); - assert(!Ent.isInternalToTU() && - "Expected an Entity visible outside of its translation unit"); + + if (Ent.isInternalToTU()) { + Decl *D = Ent.getInternalDecl(); + CtxTUMapTy::iterator I = CtxTUMap.find(&D->getASTContext()); + if (I != CtxTUMap.end()) + Handler.Handle(I->second); + return; + } MapTy::iterator I = Map.find(Ent); if (I == Map.end()) |