@@ -98,10 +98,6 @@ class GenericSignatureBuilder {
98
98
using RequirementRHS =
99
99
llvm::PointerUnion<Type, ProtocolDecl *, LayoutConstraint>;
100
100
101
- // / The location of a requirement as written somewhere in the source.
102
- typedef llvm::PointerUnion<const TypeRepr *, const RequirementRepr *>
103
- WrittenRequirementLoc;
104
-
105
101
class RequirementSource ;
106
102
107
103
class FloatingRequirementSource ;
@@ -843,7 +839,7 @@ class GenericSignatureBuilder {
843
839
class GenericSignatureBuilder ::RequirementSource final
844
840
: public llvm::FoldingSetNode,
845
841
private llvm::TrailingObjects<RequirementSource, ProtocolDecl *,
846
- WrittenRequirementLoc > {
842
+ SourceLoc > {
847
843
848
844
friend class FloatingRequirementSource ;
849
845
friend class GenericSignature ;
@@ -945,7 +941,7 @@ class GenericSignatureBuilder::RequirementSource final
945
941
const StorageKind storageKind;
946
942
947
943
// / Whether there is a trailing written requirement location.
948
- const bool hasTrailingWrittenRequirementLoc ;
944
+ const bool hasTrailingSourceLoc ;
949
945
950
946
private:
951
947
// / The actual storage, described by \c storageKind.
@@ -985,8 +981,8 @@ class GenericSignatureBuilder::RequirementSource final
985
981
}
986
982
987
983
// / The trailing written requirement location, if there is one.
988
- size_t numTrailingObjects (OverloadToken<WrittenRequirementLoc >) const {
989
- return hasTrailingWrittenRequirementLoc ? 1 : 0 ;
984
+ size_t numTrailingObjects (OverloadToken<SourceLoc >) const {
985
+ return hasTrailingSourceLoc ? 1 : 0 ;
990
986
}
991
987
992
988
#ifndef NDEBUG
@@ -1037,25 +1033,25 @@ class GenericSignatureBuilder::RequirementSource final
1037
1033
1038
1034
RequirementSource (Kind kind, Type rootType,
1039
1035
ProtocolDecl *protocol,
1040
- WrittenRequirementLoc writtenReqLoc)
1036
+ SourceLoc writtenReqLoc)
1041
1037
: kind(kind), storageKind(StorageKind::StoredType),
1042
- hasTrailingWrittenRequirementLoc (! writtenReqLoc.isNull ()),
1038
+ hasTrailingSourceLoc ( writtenReqLoc.isValid ()),
1043
1039
parent(nullptr ) {
1044
1040
assert (isAcceptableStorageKind (kind, storageKind) &&
1045
1041
" RequirementSource kind/storageKind mismatch" );
1046
1042
1047
1043
storage.type = rootType.getPointer ();
1048
1044
if (kind == RequirementSignatureSelf)
1049
1045
getTrailingObjects<ProtocolDecl *>()[0 ] = protocol;
1050
- if (hasTrailingWrittenRequirementLoc )
1051
- getTrailingObjects<WrittenRequirementLoc >()[0 ] = writtenReqLoc;
1046
+ if (hasTrailingSourceLoc )
1047
+ getTrailingObjects<SourceLoc >()[0 ] = writtenReqLoc;
1052
1048
}
1053
1049
1054
1050
RequirementSource (Kind kind, const RequirementSource *parent,
1055
1051
Type type, ProtocolDecl *protocol,
1056
- WrittenRequirementLoc writtenReqLoc)
1052
+ SourceLoc writtenReqLoc)
1057
1053
: kind(kind), storageKind(StorageKind::StoredType),
1058
- hasTrailingWrittenRequirementLoc(! writtenReqLoc.isNull ()),
1054
+ hasTrailingSourceLoc( writtenReqLoc.isValid ()),
1059
1055
parent(parent) {
1060
1056
assert ((static_cast <bool >(parent) != isRootKind (kind)) &&
1061
1057
" Root RequirementSource should not have parent (or vice versa)" );
@@ -1065,14 +1061,14 @@ class GenericSignatureBuilder::RequirementSource final
1065
1061
storage.type = type.getPointer ();
1066
1062
if (isProtocolRequirement ())
1067
1063
getTrailingObjects<ProtocolDecl *>()[0 ] = protocol;
1068
- if (hasTrailingWrittenRequirementLoc )
1069
- getTrailingObjects<WrittenRequirementLoc >()[0 ] = writtenReqLoc;
1064
+ if (hasTrailingSourceLoc )
1065
+ getTrailingObjects<SourceLoc >()[0 ] = writtenReqLoc;
1070
1066
}
1071
1067
1072
1068
RequirementSource (Kind kind, const RequirementSource *parent,
1073
1069
ProtocolConformanceRef conformance)
1074
1070
: kind(kind), storageKind(StorageKind::ProtocolConformance),
1075
- hasTrailingWrittenRequirementLoc (false ), parent(parent) {
1071
+ hasTrailingSourceLoc (false ), parent(parent) {
1076
1072
assert ((static_cast <bool >(parent) != isRootKind (kind)) &&
1077
1073
" Root RequirementSource should not have parent (or vice versa)" );
1078
1074
assert (isAcceptableStorageKind (kind, storageKind) &&
@@ -1084,7 +1080,7 @@ class GenericSignatureBuilder::RequirementSource final
1084
1080
RequirementSource (Kind kind, const RequirementSource *parent,
1085
1081
AssociatedTypeDecl *assocType)
1086
1082
: kind(kind), storageKind(StorageKind::AssociatedTypeDecl),
1087
- hasTrailingWrittenRequirementLoc (false ), parent(parent) {
1083
+ hasTrailingSourceLoc (false ), parent(parent) {
1088
1084
assert ((static_cast <bool >(parent) != isRootKind (kind)) &&
1089
1085
" Root RequirementSource should not have parent (or vice versa)" );
1090
1086
assert (isAcceptableStorageKind (kind, storageKind) &&
@@ -1095,7 +1091,7 @@ class GenericSignatureBuilder::RequirementSource final
1095
1091
1096
1092
RequirementSource (Kind kind, const RequirementSource *parent)
1097
1093
: kind(kind), storageKind(StorageKind::None),
1098
- hasTrailingWrittenRequirementLoc (false ), parent(parent) {
1094
+ hasTrailingSourceLoc (false ), parent(parent) {
1099
1095
assert ((static_cast <bool >(parent) != isRootKind (kind)) &&
1100
1096
" Root RequirementSource should not have parent (or vice versa)" );
1101
1097
assert (isAcceptableStorageKind (kind, storageKind) &&
@@ -1105,7 +1101,7 @@ class GenericSignatureBuilder::RequirementSource final
1105
1101
RequirementSource (Kind kind, const RequirementSource *parent,
1106
1102
Type newType)
1107
1103
: kind(kind), storageKind(StorageKind::StoredType),
1108
- hasTrailingWrittenRequirementLoc (false ), parent(parent) {
1104
+ hasTrailingSourceLoc (false ), parent(parent) {
1109
1105
assert ((static_cast <bool >(parent) != isRootKind (kind)) &&
1110
1106
" Root RequirementSource should not have parent (or vice versa)" );
1111
1107
assert (isAcceptableStorageKind (kind, storageKind) &&
@@ -1122,14 +1118,14 @@ class GenericSignatureBuilder::RequirementSource final
1122
1118
// / stated in an 'inheritance' or 'where' clause.
1123
1119
static const RequirementSource *forExplicit (GenericSignatureBuilder &builder,
1124
1120
Type rootType,
1125
- WrittenRequirementLoc writtenLoc);
1121
+ SourceLoc writtenLoc);
1126
1122
1127
1123
// / Retrieve a requirement source representing a requirement that is
1128
1124
// / inferred from some part of a generic declaration's signature, e.g., the
1129
1125
// / parameter or result type of a generic function.
1130
1126
static const RequirementSource *forInferred (GenericSignatureBuilder &builder,
1131
1127
Type rootType,
1132
- WrittenRequirementLoc writtenLoc);
1128
+ SourceLoc writtenLoc);
1133
1129
1134
1130
// / Retrieve a requirement source representing the requirement signature
1135
1131
// / computation for a protocol.
@@ -1151,8 +1147,8 @@ class GenericSignatureBuilder::RequirementSource final
1151
1147
Type dependentType,
1152
1148
ProtocolDecl *protocol,
1153
1149
bool inferred,
1154
- WrittenRequirementLoc writtenLoc =
1155
- WrittenRequirementLoc ()) const ;
1150
+ SourceLoc writtenLoc =
1151
+ SourceLoc ()) const ;
1156
1152
public:
1157
1153
// / A requirement source that describes a conformance requirement resolved
1158
1154
// / via a superclass requirement.
@@ -1285,20 +1281,9 @@ class GenericSignatureBuilder::RequirementSource final
1285
1281
int compare (const RequirementSource *other) const ;
1286
1282
1287
1283
// / Retrieve the written requirement location, if there is one.
1288
- WrittenRequirementLoc getWrittenRequirementLoc () const {
1289
- if (!hasTrailingWrittenRequirementLoc) return WrittenRequirementLoc ();
1290
- return getTrailingObjects<WrittenRequirementLoc>()[0 ];
1291
- }
1292
-
1293
- // / Retrieve the type representation for this requirement, if there is one.
1294
- const TypeRepr *getTypeRepr () const {
1295
- return getWrittenRequirementLoc ().dyn_cast <const TypeRepr *>();
1296
- }
1297
-
1298
- // / Retrieve the requirement representation for this requirement, if there is
1299
- // / one.
1300
- const RequirementRepr *getRequirementRepr () const {
1301
- return getWrittenRequirementLoc ().dyn_cast <const RequirementRepr *>();
1284
+ SourceLoc getSourceLoc () const {
1285
+ if (!hasTrailingSourceLoc) return SourceLoc ();
1286
+ return getTrailingObjects<SourceLoc>()[0 ];
1302
1287
}
1303
1288
1304
1289
// / Retrieve the type stored in this requirement.
@@ -1371,7 +1356,7 @@ class GenericSignatureBuilder::FloatingRequirementSource {
1371
1356
} kind;
1372
1357
1373
1358
const RequirementSource *source;
1374
- WrittenRequirementLoc loc;
1359
+ SourceLoc loc;
1375
1360
1376
1361
// Additional storage for an abstract protocol requirement.
1377
1362
union {
@@ -1391,22 +1376,15 @@ class GenericSignatureBuilder::FloatingRequirementSource {
1391
1376
return { Explicit, nullptr };
1392
1377
}
1393
1378
1394
- static FloatingRequirementSource forExplicit (const TypeRepr *typeRepr) {
1395
- FloatingRequirementSource result{ Explicit, nullptr };
1396
- result.loc = typeRepr;
1397
- return result;
1398
- }
1399
-
1400
- static FloatingRequirementSource forExplicit (
1401
- const RequirementRepr *requirementRepr) {
1379
+ static FloatingRequirementSource forExplicit (SourceLoc loc) {
1402
1380
FloatingRequirementSource result{ Explicit, nullptr };
1403
- result.loc = requirementRepr ;
1381
+ result.loc = loc ;
1404
1382
return result;
1405
1383
}
1406
1384
1407
- static FloatingRequirementSource forInferred (const TypeRepr *typeRepr ) {
1385
+ static FloatingRequirementSource forInferred (SourceLoc loc ) {
1408
1386
FloatingRequirementSource result{ Inferred, nullptr };
1409
- result.loc = typeRepr ;
1387
+ result.loc = loc ;
1410
1388
return result;
1411
1389
}
1412
1390
@@ -1423,7 +1401,7 @@ class GenericSignatureBuilder::FloatingRequirementSource {
1423
1401
static FloatingRequirementSource viaProtocolRequirement (
1424
1402
const RequirementSource *base,
1425
1403
ProtocolDecl *inProtocol,
1426
- WrittenRequirementLoc written,
1404
+ SourceLoc written,
1427
1405
bool inferred) {
1428
1406
auto kind = (inferred ? InferredProtocolRequirement : ProtocolRequirement);
1429
1407
FloatingRequirementSource result{ kind, base };
0 commit comments