Skip to content

Commit 9d07ff7

Browse files
committed
AST: Move ArchetypeType::resolveNestedType() to GenericEnvironment.cpp
1 parent a65effe commit 9d07ff7

File tree

2 files changed

+33
-32
lines changed

2 files changed

+33
-32
lines changed

lib/AST/GenericEnvironment.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "swift/AST/ASTContext.h"
1919
#include "swift/AST/GenericSignatureBuilder.h"
2020
#include "swift/AST/ProtocolConformance.h"
21+
#include "GenericSignatureBuilderImpl.h"
2122

2223
using namespace swift;
2324

@@ -116,6 +117,38 @@ Type TypeBase::mapTypeOutOfContext() {
116117
SubstFlags::AllowLoweredTypes);
117118
}
118119

120+
void ArchetypeType::resolveNestedType(
121+
std::pair<Identifier, Type> &nested) const {
122+
auto genericEnv = getGenericEnvironment();
123+
auto &builder = *genericEnv->getGenericSignatureBuilder();
124+
125+
Type interfaceType = getInterfaceType();
126+
Type memberInterfaceType =
127+
DependentMemberType::get(interfaceType, nested.first);
128+
auto resolved =
129+
builder.maybeResolveEquivalenceClass(
130+
memberInterfaceType,
131+
ArchetypeResolutionKind::CompleteWellFormed,
132+
/*wantExactPotentialArchetype=*/false);
133+
if (!resolved) {
134+
nested.second = ErrorType::get(interfaceType);
135+
return;
136+
}
137+
138+
Type result;
139+
if (auto concrete = resolved.getAsConcreteType()) {
140+
result = concrete;
141+
} else {
142+
auto *equivClass = resolved.getEquivalenceClass(builder);
143+
result = equivClass->getTypeInContext(builder, genericEnv);
144+
}
145+
146+
assert(!nested.second ||
147+
nested.second->isEqual(result) ||
148+
(nested.second->hasError() && result->hasError()));
149+
nested.second = result;
150+
}
151+
119152
Type QueryInterfaceTypeSubstitutions::operator()(SubstitutableType *type) const{
120153
if (auto gp = type->getAs<GenericTypeParamType>()) {
121154
// Find the index into the parallel arrays of generic parameters and

lib/AST/GenericSignatureBuilder.cpp

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2826,38 +2826,6 @@ PotentialArchetype *PotentialArchetype::getOrCreateNestedType(
28262826
return resultPA;
28272827
}
28282828

2829-
void ArchetypeType::resolveNestedType(
2830-
std::pair<Identifier, Type> &nested) const {
2831-
auto genericEnv = getGenericEnvironment();
2832-
auto &builder = *genericEnv->getGenericSignatureBuilder();
2833-
2834-
Type interfaceType = getInterfaceType();
2835-
Type memberInterfaceType =
2836-
DependentMemberType::get(interfaceType, nested.first);
2837-
auto resolved =
2838-
builder.maybeResolveEquivalenceClass(
2839-
memberInterfaceType,
2840-
ArchetypeResolutionKind::CompleteWellFormed,
2841-
/*wantExactPotentialArchetype=*/false);
2842-
if (!resolved) {
2843-
nested.second = ErrorType::get(interfaceType);
2844-
return;
2845-
}
2846-
2847-
Type result;
2848-
if (auto concrete = resolved.getAsConcreteType()) {
2849-
result = concrete;
2850-
} else {
2851-
auto *equivClass = resolved.getEquivalenceClass(builder);
2852-
result = equivClass->getTypeInContext(builder, genericEnv);
2853-
}
2854-
2855-
assert(!nested.second ||
2856-
nested.second->isEqual(result) ||
2857-
(nested.second->hasError() && result->hasError()));
2858-
nested.second = result;
2859-
}
2860-
28612829
Type GenericSignatureBuilder::PotentialArchetype::getDependentType(
28622830
TypeArrayView<GenericTypeParamType> genericParams) const {
28632831
auto depType = getDependentType();

0 commit comments

Comments
 (0)