summaryrefslogtreecommitdiffstats
path: root/clang/lib/Index/Indexer.cpp
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2009-07-29 23:39:52 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2009-07-29 23:39:52 +0000
commitaf7929664503a2398800767892d132a0667d42c7 (patch)
tree54e2aaf8d3b94540df9b8e161727e1eaad918f0d /clang/lib/Index/Indexer.cpp
parent4560276cf585666cf5fc5baa1fb046b82417cff9 (diff)
downloadbcm5719-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.cpp12
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())
OpenPOWER on IntegriCloud