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