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