@@ -52,6 +52,11 @@ static const StringRef SupportedConditionalCompilationEndianness[] = {
5252 " big"
5353};
5454
55+ static const StringRef SupportedConditionalCompilationRuntimes[] = {
56+ " _ObjC" ,
57+ " _Native" ,
58+ };
59+
5560template <size_t N>
5661bool contains (const StringRef (&Array)[N], const StringRef &V,
5762 std::vector<StringRef> &suggestions) {
@@ -75,36 +80,31 @@ bool contains(const StringRef (&Array)[N], const StringRef &V,
7580 return false ;
7681}
7782
78- bool LangOptions::checkPlatformConditionOS (
79- StringRef &OSName, std::vector<StringRef> &suggestions) {
80- if (OSName == " macOS" )
81- OSName = " OSX" ;
82- return contains (SupportedConditionalCompilationOSs,
83- OSName,
84- suggestions);
85- }
86-
87- bool
88- LangOptions::isPlatformConditionArchSupported (
89- StringRef ArchName, std::vector<StringRef> &suggestions) {
90- return contains (SupportedConditionalCompilationArches,
91- ArchName,
92- suggestions);
93- }
94-
95- bool
96- LangOptions::isPlatformConditionEndiannessSupported (
97- StringRef Endianness, std::vector<StringRef> &suggestions) {
98- return contains (SupportedConditionalCompilationEndianness,
99- Endianness,
100- suggestions);
83+ bool LangOptions::
84+ checkPlatformConditionSupported (PlatformConditionKind Kind, StringRef Value,
85+ std::vector<StringRef> &suggestions) {
86+ switch (Kind) {
87+ case PlatformConditionKind::OS:
88+ return contains (SupportedConditionalCompilationOSs, Value,
89+ suggestions);
90+ case PlatformConditionKind::Arch:
91+ return contains (SupportedConditionalCompilationArches, Value,
92+ suggestions);
93+ case PlatformConditionKind::Endianness:
94+ return contains (SupportedConditionalCompilationEndianness, Value,
95+ suggestions);
96+ case PlatformConditionKind::Runtime:
97+ return contains (SupportedConditionalCompilationRuntimes, Value,
98+ suggestions);
99+ }
100+ llvm_unreachable (" Unhandled enum value" );
101101}
102102
103103StringRef
104- LangOptions::getPlatformConditionValue (StringRef Name ) const {
104+ LangOptions::getPlatformConditionValue (PlatformConditionKind Kind ) const {
105105 // Last one wins.
106106 for (auto &Opt : reversed (PlatformConditionValues)) {
107- if (Opt.first == Name )
107+ if (Opt.first == Kind )
108108 return Opt.second ;
109109 }
110110 return StringRef ();
@@ -141,23 +141,23 @@ std::pair<bool, bool> LangOptions::setTarget(llvm::Triple triple) {
141141
142142 // Set the "os" platform condition.
143143 if (Target.isMacOSX ())
144- addPlatformConditionValue (" os " , " OSX" );
144+ addPlatformConditionValue (PlatformConditionKind::OS , " OSX" );
145145 else if (triple.isTvOS ())
146- addPlatformConditionValue (" os " , " tvOS" );
146+ addPlatformConditionValue (PlatformConditionKind::OS , " tvOS" );
147147 else if (triple.isWatchOS ())
148- addPlatformConditionValue (" os " , " watchOS" );
148+ addPlatformConditionValue (PlatformConditionKind::OS , " watchOS" );
149149 else if (triple.isiOS ())
150- addPlatformConditionValue (" os " , " iOS" );
150+ addPlatformConditionValue (PlatformConditionKind::OS , " iOS" );
151151 else if (triple.isAndroid ())
152- addPlatformConditionValue (" os " , " Android" );
152+ addPlatformConditionValue (PlatformConditionKind::OS , " Android" );
153153 else if (triple.isOSLinux ())
154- addPlatformConditionValue (" os " , " Linux" );
154+ addPlatformConditionValue (PlatformConditionKind::OS , " Linux" );
155155 else if (triple.isOSFreeBSD ())
156- addPlatformConditionValue (" os " , " FreeBSD" );
156+ addPlatformConditionValue (PlatformConditionKind::OS , " FreeBSD" );
157157 else if (triple.isOSWindows ())
158- addPlatformConditionValue (" os " , " Windows" );
158+ addPlatformConditionValue (PlatformConditionKind::OS , " Windows" );
159159 else if (triple.isPS4 ())
160- addPlatformConditionValue (" os " , " PS4" );
160+ addPlatformConditionValue (PlatformConditionKind::OS , " PS4" );
161161 else
162162 UnsupportedOS = true ;
163163
@@ -167,25 +167,25 @@ std::pair<bool, bool> LangOptions::setTarget(llvm::Triple triple) {
167167 switch (Target.getArch ()) {
168168 case llvm::Triple::ArchType::arm:
169169 case llvm::Triple::ArchType::thumb:
170- addPlatformConditionValue (" arch " , " arm" );
170+ addPlatformConditionValue (PlatformConditionKind::Arch , " arm" );
171171 break ;
172172 case llvm::Triple::ArchType::aarch64:
173- addPlatformConditionValue (" arch " , " arm64" );
173+ addPlatformConditionValue (PlatformConditionKind::Arch , " arm64" );
174174 break ;
175175 case llvm::Triple::ArchType::ppc64:
176- addPlatformConditionValue (" arch " , " powerpc64" );
176+ addPlatformConditionValue (PlatformConditionKind::Arch , " powerpc64" );
177177 break ;
178178 case llvm::Triple::ArchType::ppc64le:
179- addPlatformConditionValue (" arch " , " powerpc64le" );
179+ addPlatformConditionValue (PlatformConditionKind::Arch , " powerpc64le" );
180180 break ;
181181 case llvm::Triple::ArchType::x86:
182- addPlatformConditionValue (" arch " , " i386" );
182+ addPlatformConditionValue (PlatformConditionKind::Arch , " i386" );
183183 break ;
184184 case llvm::Triple::ArchType::x86_64:
185- addPlatformConditionValue (" arch " , " x86_64" );
185+ addPlatformConditionValue (PlatformConditionKind::Arch , " x86_64" );
186186 break ;
187187 case llvm::Triple::ArchType::systemz:
188- addPlatformConditionValue (" arch " , " s390x" );
188+ addPlatformConditionValue (PlatformConditionKind::Arch , " s390x" );
189189 break ;
190190 default :
191191 UnsupportedArch = true ;
@@ -198,35 +198,35 @@ std::pair<bool, bool> LangOptions::setTarget(llvm::Triple triple) {
198198 switch (Target.getArch ()) {
199199 case llvm::Triple::ArchType::arm:
200200 case llvm::Triple::ArchType::thumb:
201- addPlatformConditionValue (" _endian " , " little" );
201+ addPlatformConditionValue (PlatformConditionKind::Endianness , " little" );
202202 break ;
203203 case llvm::Triple::ArchType::aarch64:
204- addPlatformConditionValue (" _endian " , " little" );
204+ addPlatformConditionValue (PlatformConditionKind::Endianness , " little" );
205205 break ;
206206 case llvm::Triple::ArchType::ppc64:
207- addPlatformConditionValue (" _endian " , " big" );
207+ addPlatformConditionValue (PlatformConditionKind::Endianness , " big" );
208208 break ;
209209 case llvm::Triple::ArchType::ppc64le:
210- addPlatformConditionValue (" _endian " , " little" );
210+ addPlatformConditionValue (PlatformConditionKind::Endianness , " little" );
211211 break ;
212212 case llvm::Triple::ArchType::x86:
213- addPlatformConditionValue (" _endian " , " little" );
213+ addPlatformConditionValue (PlatformConditionKind::Endianness , " little" );
214214 break ;
215215 case llvm::Triple::ArchType::x86_64:
216- addPlatformConditionValue (" _endian " , " little" );
216+ addPlatformConditionValue (PlatformConditionKind::Endianness , " little" );
217217 break ;
218218 case llvm::Triple::ArchType::systemz:
219- addPlatformConditionValue (" _endian " , " big" );
219+ addPlatformConditionValue (PlatformConditionKind::Endianness , " big" );
220220 break ;
221221 default :
222222 llvm_unreachable (" undefined architecture endianness" );
223223 }
224224
225225 // Set the "runtime" platform condition.
226226 if (EnableObjCInterop)
227- addPlatformConditionValue (" _runtime " , " _ObjC" );
227+ addPlatformConditionValue (PlatformConditionKind::Runtime , " _ObjC" );
228228 else
229- addPlatformConditionValue (" _runtime " , " _Native" );
229+ addPlatformConditionValue (PlatformConditionKind::Runtime , " _Native" );
230230
231231 // If you add anything to this list, change the default size of
232232 // PlatformConditionValues to not require an extra allocation
0 commit comments