|
23 | 23 | #include "clang/Sema/Scope.h" |
24 | 24 | #include "clang/Sema/SemaCodeCompletion.h" |
25 | 25 | #include "clang/Sema/SemaObjC.h" |
| 26 | +#include "llvm/ADT/STLForwardCompat.h" |
26 | 27 | #include "llvm/ADT/SmallVector.h" |
27 | 28 | #include "llvm/ADT/StringExtras.h" |
28 | 29 |
|
@@ -1176,7 +1177,8 @@ bool Parser::isTokIdentifier_in() const { |
1176 | 1177 | // valid tokens following an 'in'; such as an identifier, unary operators, |
1177 | 1178 | // '[' etc. |
1178 | 1179 | return (getLangOpts().ObjC && Tok.is(tok::identifier) && |
1179 | | - Tok.getIdentifierInfo() == ObjCTypeQuals[objc_in]); |
| 1180 | + Tok.getIdentifierInfo() == |
| 1181 | + ObjCTypeQuals[llvm::to_underlying(ObjCTypeQual::in)]); |
1180 | 1182 | } |
1181 | 1183 |
|
1182 | 1184 | /// ParseObjCTypeQualifierList - This routine parses the objective-c's type |
@@ -1215,34 +1217,47 @@ void Parser::ParseObjCTypeQualifierList(ObjCDeclSpec &DS, |
1215 | 1217 | return; |
1216 | 1218 |
|
1217 | 1219 | const IdentifierInfo *II = Tok.getIdentifierInfo(); |
1218 | | - for (unsigned i = 0; i != objc_NumQuals; ++i) { |
1219 | | - if (II != ObjCTypeQuals[i] || |
1220 | | - NextToken().is(tok::less) || |
1221 | | - NextToken().is(tok::coloncolon)) |
| 1220 | + for (unsigned i = 0; i != llvm::to_underlying(ObjCTypeQual::NumQuals); |
| 1221 | + ++i) { |
| 1222 | + ObjCTypeQual TQ = static_cast<ObjCTypeQual>(i); |
| 1223 | + if (II != ObjCTypeQuals[llvm::to_underlying(TQ)] || |
| 1224 | + NextToken().is(tok::less) || NextToken().is(tok::coloncolon)) |
1222 | 1225 | continue; |
1223 | 1226 |
|
1224 | 1227 | ObjCDeclSpec::ObjCDeclQualifier Qual; |
1225 | 1228 | NullabilityKind Nullability; |
1226 | | - switch (i) { |
| 1229 | + switch (TQ) { |
1227 | 1230 | default: llvm_unreachable("Unknown decl qualifier"); |
1228 | | - case objc_in: Qual = ObjCDeclSpec::DQ_In; break; |
1229 | | - case objc_out: Qual = ObjCDeclSpec::DQ_Out; break; |
1230 | | - case objc_inout: Qual = ObjCDeclSpec::DQ_Inout; break; |
1231 | | - case objc_oneway: Qual = ObjCDeclSpec::DQ_Oneway; break; |
1232 | | - case objc_bycopy: Qual = ObjCDeclSpec::DQ_Bycopy; break; |
1233 | | - case objc_byref: Qual = ObjCDeclSpec::DQ_Byref; break; |
1234 | | - |
1235 | | - case objc_nonnull: |
| 1231 | + case ObjCTypeQual::in: |
| 1232 | + Qual = ObjCDeclSpec::DQ_In; |
| 1233 | + break; |
| 1234 | + case ObjCTypeQual::out: |
| 1235 | + Qual = ObjCDeclSpec::DQ_Out; |
| 1236 | + break; |
| 1237 | + case ObjCTypeQual::inout: |
| 1238 | + Qual = ObjCDeclSpec::DQ_Inout; |
| 1239 | + break; |
| 1240 | + case ObjCTypeQual::oneway: |
| 1241 | + Qual = ObjCDeclSpec::DQ_Oneway; |
| 1242 | + break; |
| 1243 | + case ObjCTypeQual::bycopy: |
| 1244 | + Qual = ObjCDeclSpec::DQ_Bycopy; |
| 1245 | + break; |
| 1246 | + case ObjCTypeQual::byref: |
| 1247 | + Qual = ObjCDeclSpec::DQ_Byref; |
| 1248 | + break; |
| 1249 | + |
| 1250 | + case ObjCTypeQual::nonnull: |
1236 | 1251 | Qual = ObjCDeclSpec::DQ_CSNullability; |
1237 | 1252 | Nullability = NullabilityKind::NonNull; |
1238 | 1253 | break; |
1239 | 1254 |
|
1240 | | - case objc_nullable: |
| 1255 | + case ObjCTypeQual::nullable: |
1241 | 1256 | Qual = ObjCDeclSpec::DQ_CSNullability; |
1242 | 1257 | Nullability = NullabilityKind::Nullable; |
1243 | 1258 | break; |
1244 | 1259 |
|
1245 | | - case objc_null_unspecified: |
| 1260 | + case ObjCTypeQual::null_unspecified: |
1246 | 1261 | Qual = ObjCDeclSpec::DQ_CSNullability; |
1247 | 1262 | Nullability = NullabilityKind::Unspecified; |
1248 | 1263 | break; |
|
0 commit comments