//===--- Program.cpp - Entity originator and misc -------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // Storage for Entities and utility functions // //===----------------------------------------------------------------------===// #include "clang/Index/Program.h" #include "ProgramImpl.h" #include "clang/Index/Handlers.h" #include "clang/Index/TranslationUnit.h" #include "clang/AST/DeclBase.h" #include "clang/AST/ASTContext.h" #include "llvm/Support/raw_ostream.h" using namespace clang; using namespace idx; // Out-of-line to give the virtual tables a home. TranslationUnit::~TranslationUnit() { } Program::Program() : Impl(new ProgramImpl()) { } Program::~Program() { delete static_cast(Impl); } static void FindEntitiesInDC(DeclContext *DC, Program &Prog, EntityHandler &Handler) { for (DeclContext::decl_iterator I = DC->decls_begin(), E = DC->decls_end(); I != E; ++I) { if (I->getLocation().isInvalid()) continue; Entity Ent = Entity::get(*I, Prog); if (Ent.isValid()) Handler.Handle(Ent); if (DeclContext *SubDC = dyn_cast(*I)) FindEntitiesInDC(SubDC, Prog, Handler); } } /// \brief Traverses the AST and passes all the entities to the Handler. void Program::FindEntities(ASTContext &Ctx, EntityHandler &Handler) { FindEntitiesInDC(Ctx.getTranslationUnitDecl(), *this, Handler); }