================ @@ -16,6 +16,74 @@ using namespace llvm::MachO; namespace clang::installapi { +GlobalRecord *FrontendRecordsSlice::addGlobal( + StringRef Name, RecordLinkage Linkage, GlobalRecord::Kind GV, + const clang::AvailabilityInfo Avail, const Decl *D, const HeaderType Access, + SymbolFlags Flags) { + + auto *GR = llvm::MachO::RecordsSlice::addGlobal(Name, Linkage, GV, Flags); + if (!FrontendRecords.contains(GR)) + FrontendRecords.insert({GR, FrontendAttrs{Avail, D, Access}}); + return GR; +} + +ObjCInterfaceRecord *FrontendRecordsSlice::addObjCInterface( + StringRef Name, RecordLinkage Linkage, const clang::AvailabilityInfo Avail, + const Decl *D, HeaderType Access, bool IsEHType) { + ObjCIFSymbolKind SymType = + ObjCIFSymbolKind::Class | ObjCIFSymbolKind::MetaClass; + if (IsEHType) + SymType |= ObjCIFSymbolKind::EHType; + auto *ObjCR = + llvm::MachO::RecordsSlice::addObjCInterface(Name, Linkage, SymType); + if (!FrontendRecords.contains(ObjCR)) + FrontendRecords.insert({ObjCR, FrontendAttrs{Avail, D, Access}}); + return ObjCR; +} + +std::optional<HeaderType> +InstallAPIContext::findAndRecordFile(const FileEntry *FE, + const Preprocessor &PP) { + if (!FE) + return std::nullopt; + + // Check if header has been looked up already and whether it is something + // installapi should use. + auto It = KnownFiles.find(FE); + if (It != KnownFiles.end()) + return It->second; + auto UnusedIt = UnusedFiles.find(FE); + if (UnusedIt != UnusedFiles.end()) + return std::nullopt; + + // If file was not found, search by how the header was + // included. This is primarily to resolve headers found + // in a different location than what passed directly as input. + StringRef IncludeName = PP.getHeaderSearchInfo().getIncludeNameForHeader(FE); + auto BackupIt = KnownIncludes.find(IncludeName.str()); + if (BackupIt != KnownIncludes.end()) { + KnownFiles[FE] = BackupIt->second; + return BackupIt->second; + } + + // Record that the file was found to avoid future string searches for the + // same file. + UnusedFiles.insert(FE); + return std::nullopt; +} + +void InstallAPIContext::addKnownHeader(const HeaderFile &H) { + auto FE = FM->getFile(H.getPath()); + if (!FE) + return; // File do not exist. ---------------- ributzka wrote:
s/do/does/ https://github.com/llvm/llvm-project/pull/83378 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits