static void indexPreprocessingRecord(ASTUnit &Unit, IndexingContext &IdxCtx) { Preprocessor &PP = Unit.getPreprocessor(); if (!PP.getPreprocessingRecord()) return; // FIXME: Only deserialize inclusion directives. PreprocessingRecord::iterator I, E; llvm::tie(I, E) = Unit.getLocalPreprocessingEntities(); bool isModuleFile = Unit.isModuleFile(); for (; I != E; ++I) { PreprocessedEntity *PPE = *I; if (InclusionDirective *ID = dyn_cast<InclusionDirective>(PPE)) { SourceLocation Loc = ID->getSourceRange().getBegin(); // Modules have synthetic main files as input, give an invalid location // if the location points to such a file. if (isModuleFile && Unit.isInMainFileID(Loc)) Loc = SourceLocation(); IdxCtx.ppIncludedFile(Loc, ID->getFileName(), ID->getFile(), ID->getKind() == InclusionDirective::Import, !ID->wasInQuotes(), ID->importedModule()); } } }
IndexingContext::CXXBasesListInfo::CXXBasesListInfo(const CXXRecordDecl *D, IndexingContext &IdxCtx, ScratchAlloc &SA) { for (CXXRecordDecl::base_class_const_iterator I = D->bases_begin(), E = D->bases_end(); I != E; ++I) { const CXXBaseSpecifier &Base = *I; BaseEntities.push_back(EntityInfo()); const NamedDecl *BaseD = 0; QualType T = Base.getType(); SourceLocation Loc = getBaseLoc(Base); if (const TypedefType *TDT = T->getAs<TypedefType>()) { BaseD = TDT->getDecl(); } else if (const TemplateSpecializationType * TST = T->getAs<TemplateSpecializationType>()) { BaseD = TST->getTemplateName().getAsTemplateDecl(); } else if (const RecordType *RT = T->getAs<RecordType>()) { BaseD = RT->getDecl(); } if (BaseD) IdxCtx.getEntityInfo(BaseD, BaseEntities.back(), SA); CXIdxBaseClassInfo BaseInfo = { 0, MakeCursorCXXBaseSpecifier(&Base, IdxCtx.CXTU), IdxCtx.getIndexLoc(Loc) }; BaseInfos.push_back(BaseInfo); } for (unsigned i = 0, e = BaseInfos.size(); i != e; ++i) { if (BaseEntities[i].name && BaseEntities[i].USR) BaseInfos[i].base = &BaseEntities[i]; } for (unsigned i = 0, e = BaseInfos.size(); i != e; ++i) CXBases.push_back(&BaseInfos[i]); }
static void indexPreprocessingRecord(ASTUnit &Unit, IndexingContext &IdxCtx) { Preprocessor &PP = Unit.getPreprocessor(); if (!PP.getPreprocessingRecord()) return; // FIXME: Only deserialize inclusion directives. PreprocessingRecord::iterator I, E; llvm::tie(I, E) = Unit.getLocalPreprocessingEntities(); for (; I != E; ++I) { PreprocessedEntity *PPE = *I; if (InclusionDirective *ID = dyn_cast<InclusionDirective>(PPE)) { if (!ID->importedModule()) IdxCtx.ppIncludedFile(ID->getSourceRange().getBegin(),ID->getFileName(), ID->getFile(), ID->getKind() == InclusionDirective::Import, !ID->wasInQuotes()); } } }