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
14using clang::DiagnosticBuilder;
15
16namespace llvm {
17namespace MachO {
18const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB,
19 const Architecture &Arch) {
20 DB.AddString(V: getArchitectureName(Arch));
21 return DB;
22}
23
24const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB,
25 const ArchitectureSet &ArchSet) {
26 DB.AddString(V: std::string(ArchSet));
27 return DB;
28}
29
30const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB,
31 const PlatformType &Platform) {
32 DB.AddString(V: getPlatformName(Platform));
33 return DB;
34}
35
36const 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 c: Platforms, os&: Stream,
44 each_fn: [&Stream](const std::pair<PlatformType, VersionTuple> &PV) {
45 Stream << getPlatformName(Platform: PV.first);
46 if (!PV.second.empty())
47 Stream << PV.second.getAsString();
48 });
49 Stream << " ]";
50 DB.AddString(V: PlatformAsString);
51 return DB;
52}
53
54const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB,
55 const FileType &Type) {
56 switch (Type) {
57 case FileType::MachO_Bundle:
58 DB.AddString(V: "mach-o bundle");
59 return DB;
60 case FileType::MachO_DynamicLibrary:
61 DB.AddString(V: "mach-o dynamic library");
62 return DB;
63 case FileType::MachO_DynamicLibrary_Stub:
64 DB.AddString(V: "mach-o dynamic library stub");
65 return DB;
66 case FileType::TBD_V1:
67 DB.AddString(V: "tbd-v1");
68 return DB;
69 case FileType::TBD_V2:
70 DB.AddString(V: "tbd-v2");
71 return DB;
72 case FileType::TBD_V3:
73 DB.AddString(V: "tbd-v3");
74 return DB;
75 case FileType::TBD_V4:
76 DB.AddString(V: "tbd-v4");
77 return DB;
78 case FileType::TBD_V5:
79 DB.AddString(V: "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
88const 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(V: VersionString);
94 return DB;
95}
96
97const clang::DiagnosticBuilder &
98operator<<(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(V: Entry);
105 return DB;
106}
107
108} // namespace MachO
109} // namespace llvm
110