LLVM: lib/TextAPI/TextStubCommon.cpp Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
16
18
19namespace llvm {
20namespace yaml {
21
27 FlowStringRef &Out) {
29}
33
38 IO.enumCase(Constraint, "retain_release_for_simulator",
40 IO.enumCase(Constraint, "retain_release_or_gc",
43}
44
45void ScalarTraits::output(const PlatformSet &Values, void *IO,
47
48 const auto *Ctx = reinterpret_cast<TextAPIContext *>(IO);
50 "File type is not set in context");
51
52 if (Ctx && Ctx->FileKind == TBD_V3 && Values.count(PLATFORM_MACOS) &&
53 Values.count(PLATFORM_MACCATALYST)) {
54 OS << "zippered";
55 return;
56 }
57
59 switch (*Values.begin()) {
60 default:
62 break;
63 case PLATFORM_MACOS:
64 OS << "macosx";
65 break;
66 case PLATFORM_IOSSIMULATOR:
67 [[fallthrough]];
68 case PLATFORM_IOS:
69 OS << "ios";
70 break;
71 case PLATFORM_WATCHOSSIMULATOR:
72 [[fallthrough]];
73 case PLATFORM_WATCHOS:
74 OS << "watchos";
75 break;
76 case PLATFORM_TVOSSIMULATOR:
77 [[fallthrough]];
78 case PLATFORM_TVOS:
79 OS << "tvos";
80 break;
81 case PLATFORM_BRIDGEOS:
82 OS << "bridgeos";
83 break;
84 case PLATFORM_MACCATALYST:
85 OS << "maccatalyst";
86 break;
87 case PLATFORM_DRIVERKIT:
88 OS << "driverkit";
89 break;
90 }
91}
92
95 const auto *Ctx = reinterpret_cast<TextAPIContext *>(IO);
96 assert((!Ctx || Ctx->FileKind != FileType::Invalid) &&
97 "File type is not set in context");
98
99 if (Scalar == "zippered") {
100 if (Ctx && Ctx->FileKind == FileType::TBD_V3) {
101 Values.insert(PLATFORM_MACOS);
102 Values.insert(PLATFORM_MACCATALYST);
103 return {};
104 }
105 return "invalid platform";
106 }
107
108 auto Platform = StringSwitch(Scalar)
109 .Case("macosx", PLATFORM_MACOS)
110 .Case("ios", PLATFORM_IOS)
111 .Case("watchos", PLATFORM_WATCHOS)
112 .Case("tvos", PLATFORM_TVOS)
113 .Case("bridgeos", PLATFORM_BRIDGEOS)
114 .Case("iosmac", PLATFORM_MACCATALYST)
115 .Case("maccatalyst", PLATFORM_MACCATALYST)
116 .Case("driverkit", PLATFORM_DRIVERKIT)
117 .Default(PLATFORM_UNKNOWN);
118
119 if (Platform == PLATFORM_MACCATALYST)
120 if (Ctx && Ctx->FileKind != FileType::TBD_V3)
121 return "invalid platform";
122
123 if (Platform == PLATFORM_UNKNOWN)
124 return "unknown platform";
125
126 Values.insert(Platform);
127 return {};
128}
129
132}
133
135 ArchitectureSet &Archs) {
136#define ARCHINFO(arch, name, type, subtype, numbits) \
137 IO.bitSetCase(Archs, #arch, 1U << static_cast(AK_##arch));
138#include "llvm/TextAPI/Architecture.def"
139#undef ARCHINFO
140}
141
143 raw_ostream &OS) {
145}
149 return {};
150}
153}
154
156 raw_ostream &OS) {
158}
160 PackedVersion &Value) {
162 return "invalid packed version string.";
163 return {};
164}
167}
168
172 case 1:
173 OS << "1.0";
174 break;
175 case 2:
176 OS << "1.1";
177 break;
178 case 3:
179 OS << "2.0";
180 break;
181 case 4:
182 OS << "3.0";
183 break;
184 default:
186 break;
187 }
188}
190 SwiftVersion &Value) {
193 "File type is not set in context");
194
197 return "invalid Swift ABI version.";
198 return {};
199 } else {
201 .Case("1.0", 1)
202 .Case("1.1", 2)
203 .Case("2.0", 3)
204 .Case("3.0", 4)
206 }
207
208 if (Value != SwiftVersion(0))
209 return {};
210
212 return "invalid Swift ABI version.";
213
215}
219
221
226
230
231}
232}
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
This file implements the StringSwitch template, which mimics a switch() statement whose cases are str...
std::pair< llvm::MachO::Target, std::string > UUID
const_iterator begin() const
size_type count(const T &V) const
count - Return 1 if the element is in the set, 0 otherwise.
std::pair< const_iterator, bool > insert(const T &V)
insert - Insert an element into the set if it isn't already there.
StringRef - Represent a constant reference to a string, i.e.
A switch()-like statement whose cases are string literals.
StringSwitch & Case(StringLiteral S, T Value)
LLVM Value Representation.
This class implements an extremely fast bulk output stream that can only output to a stream.
void enumCase(T &Val, StringRef Str, const T ConstVal)
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
LLVM_ABI Architecture getArchitectureFromName(StringRef Name)
Convert a name to an architecture slice.
@ Invalid
Invalid file type.
@ TBD_V3
Text-based stub file (.tbd) version 3.0.
@ TBD_V4
Text-based stub file (.tbd) version 4.0.
SmallSet< PlatformType, 3 > PlatformSet
ObjCConstraintType
Defines a list of Objective-C constraints.
@ Retain_Release_For_Simulator
Retain/Release for Simulator.
@ Retain_Release_Or_GC
Retain/Release or Garbage Collection.
@ Retain_Release
Retain/Release.
Architecture
Defines the architecture slices that are supported by Text-based Stub files.
QuotingType
Describe which type of quotes should be used when quoting is necessary.
This is an optimization pass for GlobalISel generic memory operations.
FunctionAddr VTableAddr Value
This class should be specialized by any integer type that is a union of bit values and the YAML repre...
This class should be specialized by any integral type that converts to/from a YAML scalar where there...
This class should be specialized by type that requires custom conversion to/from a yaml scalar.