1 //===- DiagnosticBuilderWrappers.cpp ----------------------------*- C++-*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "DiagnosticBuilderWrappers.h" 10 #include "llvm/ADT/STLExtras.h" 11 #include "llvm/Support/raw_ostream.h" 12 #include "llvm/TextAPI/Platform.h" 13 14 using clang::DiagnosticBuilder; 15 16 namespace llvm { 17 namespace MachO { 18 const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB, 19 const Architecture &Arch) { 20 DB.AddString(getArchitectureName(Arch)); 21 return DB; 22 } 23 24 const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB, 25 const ArchitectureSet &ArchSet) { 26 DB.AddString(std::string(ArchSet)); 27 return DB; 28 } 29 30 const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB, 31 const PlatformType &Platform) { 32 DB.AddString(getPlatformName(Platform)); 33 return DB; 34 } 35 36 const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB, 37 const PlatformVersionSet &Platforms) { 38 std::string PlatformAsString; 39 raw_string_ostream Stream(PlatformAsString); 40 41 Stream << "[ "; 42 llvm::interleaveComma( 43 Platforms, Stream, 44 [&Stream](const std::pair<PlatformType, VersionTuple> &PV) { 45 Stream << getPlatformName(PV.first); 46 if (!PV.second.empty()) 47 Stream << PV.second.getAsString(); 48 }); 49 Stream << " ]"; 50 DB.AddString(PlatformAsString); 51 return DB; 52 } 53 54 const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB, 55 const FileType &Type) { 56 switch (Type) { 57 case FileType::MachO_Bundle: 58 DB.AddString("mach-o bundle"); 59 return DB; 60 case FileType::MachO_DynamicLibrary: 61 DB.AddString("mach-o dynamic library"); 62 return DB; 63 case FileType::MachO_DynamicLibrary_Stub: 64 DB.AddString("mach-o dynamic library stub"); 65 return DB; 66 case FileType::TBD_V1: 67 DB.AddString("tbd-v1"); 68 return DB; 69 case FileType::TBD_V2: 70 DB.AddString("tbd-v2"); 71 return DB; 72 case FileType::TBD_V3: 73 DB.AddString("tbd-v3"); 74 return DB; 75 case FileType::TBD_V4: 76 DB.AddString("tbd-v4"); 77 return DB; 78 case FileType::TBD_V5: 79 DB.AddString("tbd-v5"); 80 return DB; 81 case FileType::Invalid: 82 case FileType::All: 83 break; 84 } 85 llvm_unreachable("Unexpected file type for diagnostics."); 86 } 87 88 const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB, 89 const PackedVersion &Version) { 90 std::string VersionString; 91 raw_string_ostream OS(VersionString); 92 OS << Version; 93 DB.AddString(VersionString); 94 return DB; 95 } 96 97 const clang::DiagnosticBuilder & 98 operator<<(const clang::DiagnosticBuilder &DB, 99 const clang::installapi::LibAttrs::Entry &LibAttr) { 100 std::string Entry; 101 raw_string_ostream OS(Entry); 102 103 OS << LibAttr.first << " [ " << LibAttr.second << " ]"; 104 DB.AddString(Entry); 105 return DB; 106 } 107 108 } // namespace MachO 109 } // namespace llvm 110