static void indexTranslationUnit(ASTUnit &Unit, IndexingContext &IdxCtx) { // FIXME: Only deserialize stuff from the last chained PCH, not the PCH/Module // that it depends on. bool OnlyLocal = !Unit.isMainFileAST() && Unit.getOnlyLocalDecls(); if (OnlyLocal) { for (ASTUnit::top_level_iterator TL = Unit.top_level_begin(), TLEnd = Unit.top_level_end(); TL != TLEnd; ++TL) { IdxCtx.indexTopLevelDecl(*TL); if (IdxCtx.shouldAbort()) return; } } else { TranslationUnitDecl *TUDecl = Unit.getASTContext().getTranslationUnitDecl(); for (TranslationUnitDecl::decl_iterator I = TUDecl->decls_begin(), E = TUDecl->decls_end(); I != E; ++I) { IdxCtx.indexTopLevelDecl(*I); if (IdxCtx.shouldAbort()) return; } } }
static void indexPreprocessingRecord(ASTUnit &Unit, IndexingContext &IdxCtx) { Preprocessor &PP = Unit.getPreprocessor(); if (!PP.getPreprocessingRecord()) return; PreprocessingRecord &PPRec = *PP.getPreprocessingRecord(); // FIXME: Only deserialize inclusion directives. // FIXME: Only deserialize stuff from the last chained PCH, not the PCH/Module // that it depends on. bool OnlyLocal = !Unit.isMainFileAST() && Unit.getOnlyLocalDecls(); PreprocessingRecord::iterator I, E; if (OnlyLocal) { I = PPRec.local_begin(); E = PPRec.local_end(); } else { I = PPRec.begin(); E = PPRec.end(); } for (; I != E; ++I) { PreprocessedEntity *PPE = *I; if (InclusionDirective *ID = dyn_cast<InclusionDirective>(PPE)) { IdxCtx.ppIncludedFile(ID->getSourceRange().getBegin(), ID->getFileName(), ID->getFile(), ID->getKind() == InclusionDirective::Import, !ID->wasInQuotes()); } } }