Skip to content

Commit 60ae226

Browse files
authored
Merge pull request swiftlang#36101 from slavapestov/conformance-access-path-cleanup
Re-implement GenericSignature::getConformanceAccessPath()
2 parents b802e5b + 1fe45e8 commit 60ae226

File tree

10 files changed

+129
-281
lines changed

10 files changed

+129
-281
lines changed

include/swift/AST/GenericSignature.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -234,13 +234,6 @@ class alignas(1 << TypeAlignInBits) GenericSignatureImpl final
234234
mutable llvm::PointerUnion<const GenericSignatureImpl *, ASTContext *>
235235
CanonicalSignatureOrASTContext;
236236

237-
void buildConformanceAccessPath(
238-
SmallVectorImpl<ConformanceAccessPath::Entry> &path,
239-
ArrayRef<Requirement> reqs,
240-
const void /*GenericSignatureBuilder::RequirementSource*/ *source,
241-
ProtocolDecl *conformingProto, Type rootType,
242-
ProtocolDecl *requirementSignatureProto) const;
243-
244237
friend class ArchetypeType;
245238

246239
public:

include/swift/AST/GenericSignatureBuilder.h

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -626,7 +626,6 @@ class GenericSignatureBuilder {
626626
/// After this point, one cannot introduce new requirements, and the
627627
/// generic signature builder no longer has valid state.
628628
GenericSignature computeGenericSignature(
629-
SourceLoc loc,
630629
bool allowConcreteGenericParams = false,
631630
bool allowBuilderToMove = true) &&;
632631

@@ -639,8 +638,7 @@ class GenericSignatureBuilder {
639638
///
640639
/// \param allowConcreteGenericParams If true, allow generic parameters to
641640
/// be made concrete.
642-
void finalize(SourceLoc loc,
643-
TypeArrayView<GenericTypeParamType> genericParams,
641+
void finalize(TypeArrayView<GenericTypeParamType> genericParams,
644642
bool allowConcreteGenericParams=false);
645643

646644
public:
@@ -923,10 +921,6 @@ class GenericSignatureBuilder::RequirementSource final
923921
/// Whether there is a trailing written requirement location.
924922
const bool hasTrailingWrittenRequirementLoc;
925923

926-
public:
927-
/// Whether a protocol requirement came from the requirement signature.
928-
const bool usesRequirementSignature;
929-
930924
private:
931925
/// The actual storage, described by \c storageKind.
932926
union {
@@ -1022,7 +1016,7 @@ class GenericSignatureBuilder::RequirementSource final
10221016
WrittenRequirementLoc writtenReqLoc)
10231017
: kind(kind), storageKind(StorageKind::StoredType),
10241018
hasTrailingWrittenRequirementLoc(!writtenReqLoc.isNull()),
1025-
usesRequirementSignature(false), parent(nullptr) {
1019+
parent(nullptr) {
10261020
assert(isAcceptableStorageKind(kind, storageKind) &&
10271021
"RequirementSource kind/storageKind mismatch");
10281022

@@ -1038,7 +1032,6 @@ class GenericSignatureBuilder::RequirementSource final
10381032
WrittenRequirementLoc writtenReqLoc)
10391033
: kind(kind), storageKind(StorageKind::StoredType),
10401034
hasTrailingWrittenRequirementLoc(!writtenReqLoc.isNull()),
1041-
usesRequirementSignature(!protocol->isComputingRequirementSignature()),
10421035
parent(parent) {
10431036
assert((static_cast<bool>(parent) != isRootKind(kind)) &&
10441037
"Root RequirementSource should not have parent (or vice versa)");
@@ -1055,8 +1048,7 @@ class GenericSignatureBuilder::RequirementSource final
10551048
RequirementSource(Kind kind, const RequirementSource *parent,
10561049
ProtocolConformanceRef conformance)
10571050
: kind(kind), storageKind(StorageKind::ProtocolConformance),
1058-
hasTrailingWrittenRequirementLoc(false),
1059-
usesRequirementSignature(false), parent(parent) {
1051+
hasTrailingWrittenRequirementLoc(false), parent(parent) {
10601052
assert((static_cast<bool>(parent) != isRootKind(kind)) &&
10611053
"Root RequirementSource should not have parent (or vice versa)");
10621054
assert(isAcceptableStorageKind(kind, storageKind) &&
@@ -1068,8 +1060,7 @@ class GenericSignatureBuilder::RequirementSource final
10681060
RequirementSource(Kind kind, const RequirementSource *parent,
10691061
AssociatedTypeDecl *assocType)
10701062
: kind(kind), storageKind(StorageKind::AssociatedTypeDecl),
1071-
hasTrailingWrittenRequirementLoc(false),
1072-
usesRequirementSignature(false), parent(parent) {
1063+
hasTrailingWrittenRequirementLoc(false), parent(parent) {
10731064
assert((static_cast<bool>(parent) != isRootKind(kind)) &&
10741065
"Root RequirementSource should not have parent (or vice versa)");
10751066
assert(isAcceptableStorageKind(kind, storageKind) &&
@@ -1080,8 +1071,7 @@ class GenericSignatureBuilder::RequirementSource final
10801071

10811072
RequirementSource(Kind kind, const RequirementSource *parent)
10821073
: kind(kind), storageKind(StorageKind::None),
1083-
hasTrailingWrittenRequirementLoc(false),
1084-
usesRequirementSignature(false), parent(parent) {
1074+
hasTrailingWrittenRequirementLoc(false), parent(parent) {
10851075
assert((static_cast<bool>(parent) != isRootKind(kind)) &&
10861076
"Root RequirementSource should not have parent (or vice versa)");
10871077
assert(isAcceptableStorageKind(kind, storageKind) &&
@@ -1091,8 +1081,7 @@ class GenericSignatureBuilder::RequirementSource final
10911081
RequirementSource(Kind kind, const RequirementSource *parent,
10921082
Type newType)
10931083
: kind(kind), storageKind(StorageKind::StoredType),
1094-
hasTrailingWrittenRequirementLoc(false),
1095-
usesRequirementSignature(false), parent(parent) {
1084+
hasTrailingWrittenRequirementLoc(false), parent(parent) {
10961085
assert((static_cast<bool>(parent) != isRootKind(kind)) &&
10971086
"Root RequirementSource should not have parent (or vice versa)");
10981087
assert(isAcceptableStorageKind(kind, storageKind) &&

lib/AST/ASTContext.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1742,8 +1742,7 @@ GenericSignatureBuilder *ASTContext::getOrCreateGenericSignatureBuilder(
17421742

17431743
#if SWIFT_GSB_EXPENSIVE_ASSERTIONS
17441744
auto builderSig =
1745-
builder->computeGenericSignature(SourceLoc(),
1746-
/*allowConcreteGenericParams=*/true);
1745+
builder->computeGenericSignature(/*allowConcreteGenericParams=*/true);
17471746
if (builderSig.getCanonicalSignature() != sig) {
17481747
llvm::errs() << "ERROR: generic signature builder is not idempotent.\n";
17491748
llvm::errs() << "Original generic signature : ";

0 commit comments

Comments
 (0)