@@ -1082,13 +1082,24 @@ class Parser {
1082
1082
// / an error parsing.
1083
1083
bool parseVersionTuple (llvm::VersionTuple &Version, SourceRange &Range,
1084
1084
const Diagnostic &D);
1085
+
1085
1086
bool parseTypeAttributeList (ParamDecl::Specifier &Specifier,
1086
1087
SourceLoc &SpecifierLoc,
1087
- TypeAttributes &Attributes);
1088
- ParserStatus parseTypeAttributeListSyntax (Optional<ParsedTokenSyntax> &specifier,
1089
- Optional<ParsedAttributeListSyntax> &attrs);
1090
- ParsedSyntaxResult<ParsedAttributeSyntax> parseTypeAttributeSyntax ();
1091
-
1088
+ TypeAttributes &Attributes) {
1089
+ if (Tok.isAny (tok::at_sign, tok::kw_inout) ||
1090
+ (Tok.is (tok::identifier) &&
1091
+ (Tok.getRawText ().equals (" __shared" ) ||
1092
+ Tok.getRawText ().equals (" __owned" ))))
1093
+ return parseTypeAttributeListPresent (Specifier, SpecifierLoc, Attributes);
1094
+ return false ;
1095
+ }
1096
+ bool parseTypeAttributeListPresent (ParamDecl::Specifier &Specifier,
1097
+ SourceLoc &SpecifierLoc,
1098
+ TypeAttributes &Attributes);
1099
+ bool parseTypeAttribute (TypeAttributes &Attributes, SourceLoc AtLoc,
1100
+ bool justChecking = false );
1101
+
1102
+
1092
1103
ParserResult<ImportDecl> parseDeclImport (ParseDeclOptions Flags,
1093
1104
DeclAttributes &Attributes);
1094
1105
ParserStatus parseInheritance (MutableArrayRef<TypeLoc> &Inherited,
@@ -1179,47 +1190,44 @@ class Parser {
1179
1190
// ===--------------------------------------------------------------------===//
1180
1191
// Type Parsing
1181
1192
1182
- ParserResult<TypeRepr> parseType ();
1183
- ParserResult<TypeRepr> parseType (Diag<> MessageID,
1184
- bool HandleCodeCompletion = true ,
1185
- bool IsSILFuncDecl = false );
1186
- ParserStatus parseGenericArguments (llvm::SmallVectorImpl<TypeRepr *> &ArgsAST,
1187
- SourceLoc &LAngleLoc,
1188
- SourceLoc &RAngleLoc);
1189
- TypeRepr *applyAttributeToType (TypeRepr *Ty, const TypeAttributes &Attr,
1190
- ParamDecl::Specifier Specifier,
1191
- SourceLoc SpecifierLoc);
1192
- ParserResult<TypeRepr> parseAnyTypeAST ();
1193
+ using TypeASTResult = ParserResult<TypeRepr>;
1194
+ using TypeResult = ParsedSyntaxResult<ParsedTypeSyntax>;
1193
1195
1194
1196
ParsedSyntaxResult<ParsedLayoutConstraintSyntax>
1195
1197
parseLayoutConstraintSyntax ();
1196
1198
1197
- ParsedSyntaxResult<ParsedTypeSyntax> parseTypeSyntax ();
1198
- ParsedSyntaxResult<ParsedTypeSyntax>
1199
- parseTypeSyntax (Diag<> MessageID, bool HandleCodeCompletion = true ,
1200
- bool IsSILFuncDecl = false );
1199
+ TypeResult parseTypeSyntax ();
1200
+ TypeResult parseTypeSyntax (Diag<> MessageID, bool HandleCodeCompletion = true ,
1201
+ bool IsSILFuncDecl = false );
1202
+
1203
+ TypeASTResult parseType ();
1204
+ TypeASTResult parseType (Diag<> MessageID, bool HandleCodeCompletion = true ,
1205
+ bool IsSILFuncDecl = false );
1206
+ ParserStatus
1207
+ parseGenericArgumentsAST (llvm::SmallVectorImpl<TypeRepr *> &ArgsAST,
1208
+ SourceLoc &LAngleLoc, SourceLoc &RAngleLoc);
1209
+ TypeASTResult parseSILBoxType (GenericParamList *generics,
1210
+ const TypeAttributes &attrs,
1211
+ Optional<Scope> &GenericsScope);
1212
+ TypeASTResult parseTypeSimpleOrCompositionAST (Diag<> MessageID,
1213
+ bool HandleCodeCompletion);
1214
+ TypeASTResult parseAnyTypeAST ();
1201
1215
1202
1216
ParsedSyntaxResult<ParsedGenericArgumentClauseSyntax>
1203
1217
parseGenericArgumentClauseSyntax ();
1204
1218
1205
- ParsedSyntaxResult<ParsedTypeSyntax>
1206
- parseTypeSimple (Diag<> MessageID, bool HandleCodeCompletion);
1207
- ParsedSyntaxResult<ParsedTypeSyntax>
1208
- parseTypeSimpleOrComposition (Diag<> MessageID, bool HandleCodeCompletion);
1209
- ParsedSyntaxResult<ParsedTypeSyntax> parseTypeIdentifier ();
1210
- ParsedSyntaxResult<ParsedTypeSyntax> parseAnyType ();
1211
- ParsedSyntaxResult<ParsedTypeSyntax> parseTypeTupleBody ();
1212
- ParsedSyntaxResult<ParsedTypeSyntax> parseTypeCollection ();
1213
- ParsedSyntaxResult<ParsedTypeSyntax> parseMetatypeType (ParsedTypeSyntax Base);
1214
- ParsedSyntaxResult<ParsedTypeSyntax> parseOptionalType (ParsedTypeSyntax Base);
1215
- ParsedSyntaxResult<ParsedTypeSyntax>
1216
- parseImplicitlyUnwrappedOptionalType (ParsedTypeSyntax Base);
1217
- ParsedSyntaxResult<ParsedTypeSyntax> parseSILBoxTypeSyntax (
1218
- Optional<ParsedGenericParameterClauseListSyntax> genericParams);
1219
-
1220
- ParsedSyntaxResult<ParsedTypeSyntax> parseTypeArray (ParsedTypeSyntax Base,
1221
- SourceLoc BaseLoc);
1222
- ParsedSyntaxResult<ParsedTypeSyntax> parseOldStyleProtocolComposition ();
1219
+ TypeResult parseTypeSimple (Diag<> MessageID, bool HandleCodeCompletion);
1220
+ TypeResult parseTypeSimpleOrComposition (Diag<> MessageID, bool HandleCodeCompletion);
1221
+ TypeResult parseTypeIdentifier ();
1222
+ TypeResult parseAnyType ();
1223
+ TypeResult parseTypeTupleBody ();
1224
+ TypeResult parseTypeCollection ();
1225
+ TypeResult parseMetatypeType (ParsedTypeSyntax Base);
1226
+ TypeResult parseOptionalType (ParsedTypeSyntax Base);
1227
+ TypeResult parseImplicitlyUnwrappedOptionalType (ParsedTypeSyntax Base);
1228
+
1229
+ TypeResult parseTypeArray (ParsedTypeSyntax Base, SourceLoc BaseLoc);
1230
+ TypeResult parseOldStyleProtocolComposition ();
1223
1231
1224
1232
bool isOptionalToken (const Token &T) const ;
1225
1233
ParsedTokenSyntax consumeOptionalTokenSyntax ();
@@ -1229,10 +1237,9 @@ class Parser {
1229
1237
ParsedTokenSyntax consumeImplicitlyUnwrappedOptionalTokenSyntax ();
1230
1238
SourceLoc consumeImplicitlyUnwrappedOptionalToken ();
1231
1239
1232
- ParsedSyntaxResult<ParsedTypeSyntax>
1233
- applyAttributeToTypeSyntax (ParsedSyntaxResult<ParsedTypeSyntax> &&ty,
1234
- Optional<ParsedTokenSyntax> specifier,
1235
- Optional<ParsedAttributeListSyntax> attrs);
1240
+ TypeRepr *applyAttributeToType (TypeRepr *Ty, const TypeAttributes &Attr,
1241
+ ParamDecl::Specifier Specifier,
1242
+ SourceLoc SpecifierLoc);
1236
1243
1237
1244
// ===--------------------------------------------------------------------===//
1238
1245
// Pattern Parsing
0 commit comments