Skip to content

Commit ff308e9

Browse files
committed
AST: Remove TypeBase::openAnyExistentialType()
1 parent 0c2f28f commit ff308e9

File tree

9 files changed

+29
-38
lines changed

9 files changed

+29
-38
lines changed

include/swift/AST/Types.h

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -911,9 +911,6 @@ class alignas(1 << TypeAlignInBits) TypeBase
911911
/// bound.
912912
bool isClassExistentialType();
913913

914-
/// Opens an existential instance or meta-type and returns the opened type.
915-
Type openAnyExistentialType(OpenedArchetypeType *&opened);
916-
917914
/// Break an existential down into a set of constraints.
918915
ExistentialLayout getExistentialLayout();
919916

@@ -6835,7 +6832,7 @@ class OpenedArchetypeType final : public LocalArchetypeType,
68356832
///
68366833
/// \param existential The existential type or existential metatype to open.
68376834
/// \param interfaceType The interface type represented by this archetype.
6838-
static CanType getAny(CanType existential, Type interfaceType);
6835+
static Type getAny(Type existential, Type interfaceType);
68396836

68406837
/// Create a new archetype that represents the opened type
68416838
/// of an existential value.
@@ -6845,7 +6842,7 @@ class OpenedArchetypeType final : public LocalArchetypeType,
68456842
/// will unwrap any existential metatype containers.
68466843
///
68476844
/// \param existential The existential type or existential metatype to open.
6848-
static CanType getAny(CanType existential);
6845+
static Type getAny(Type existential);
68496846

68506847
/// Retrieve the ID number of this opened existential.
68516848
UUID getOpenedExistentialID() const;

lib/AST/ASTContext.cpp

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5334,19 +5334,25 @@ CanOpenedArchetypeType OpenedArchetypeType::get(CanType existential,
53345334
return CanOpenedArchetypeType(result);
53355335
}
53365336

5337-
CanType OpenedArchetypeType::getAny(CanType existential, Type interfaceType) {
5337+
Type OpenedArchetypeType::getAny(Type existential, Type interfaceTy) {
53385338
assert(existential->isAnyExistentialType());
53395339
if (auto metatypeTy = existential->getAs<ExistentialMetatypeType>()) {
53405340
auto instanceTy =
53415341
metatypeTy->getExistentialInstanceType()->getCanonicalType();
5342-
return CanMetatypeType::get(
5343-
OpenedArchetypeType::getAny(instanceTy, interfaceType));
5342+
auto openedInstanceTy = OpenedArchetypeType::getAny(
5343+
instanceTy, interfaceTy);
5344+
if (metatypeTy->hasRepresentation()) {
5345+
return MetatypeType::get(openedInstanceTy,
5346+
metatypeTy->getRepresentation());
5347+
}
5348+
return MetatypeType::get(openedInstanceTy);
53445349
}
53455350
assert(existential->isExistentialType());
5346-
return OpenedArchetypeType::get(existential, interfaceType);
5351+
return OpenedArchetypeType::get(existential->getCanonicalType(),
5352+
interfaceTy);
53475353
}
53485354

5349-
CanType OpenedArchetypeType::getAny(CanType existential) {
5355+
Type OpenedArchetypeType::getAny(Type existential) {
53505356
auto interfaceTy = OpenedArchetypeType::getSelfInterfaceTypeFromContext(
53515357
GenericSignature(), existential->getASTContext());
53525358
return getAny(existential, interfaceTy);

lib/AST/Type.cpp

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4395,20 +4395,6 @@ SILBoxType::SILBoxType(ASTContext &C,
43954395
assert(Substitutions.isCanonical());
43964396
}
43974397

4398-
Type TypeBase::openAnyExistentialType(OpenedArchetypeType *&opened) {
4399-
assert(isAnyExistentialType());
4400-
if (auto metaty = getAs<ExistentialMetatypeType>()) {
4401-
opened = OpenedArchetypeType::get(
4402-
metaty->getExistentialInstanceType()->getCanonicalType());
4403-
if (metaty->hasRepresentation())
4404-
return MetatypeType::get(opened, metaty->getRepresentation());
4405-
else
4406-
return MetatypeType::get(opened);
4407-
}
4408-
opened = OpenedArchetypeType::get(getCanonicalType());
4409-
return opened;
4410-
}
4411-
44124398
AnyFunctionType *AnyFunctionType::getWithoutDifferentiability() const {
44134399
SmallVector<Param, 8> newParams;
44144400
for (auto &param : getParams()) {

lib/IRGen/GenHeap.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2054,7 +2054,7 @@ IsaEncoding irgen::getIsaEncodingForType(IRGenModule &IGM,
20542054
// Existentials use the encoding of the enclosed dynamic type.
20552055
if (type->isAnyExistentialType()) {
20562056
return getIsaEncodingForType(
2057-
IGM, OpenedArchetypeType::getAny(type));
2057+
IGM, OpenedArchetypeType::getAny(type)->getCanonicalType());
20582058
}
20592059

20602060
if (auto archetype = dyn_cast<ArchetypeType>(type)) {

lib/SILGen/SILGenConcurrency.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,8 @@ emitDistributedActorIsolation(SILGenFunction &SGF, SILLocation loc,
298298
ManagedValue actor, CanType actorType) {
299299
// First, open the actor type if it's an existential type.
300300
if (actorType->isExistentialType()) {
301-
CanType openedType = OpenedArchetypeType::getAny(actorType);
301+
CanType openedType = OpenedArchetypeType::getAny(actorType)
302+
->getCanonicalType();
302303
SILType loweredOpenedType = SGF.getLoweredType(openedType);
303304

304305
actor = SGF.emitOpenExistential(loc, actor, loweredOpenedType,

lib/SILGen/SILGenPoly.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,8 @@ SILGenFunction::emitTransformExistential(SILLocation loc,
254254
FormalEvaluationScope scope(*this);
255255

256256
if (inputType->isAnyExistentialType()) {
257-
CanType openedType = OpenedArchetypeType::getAny(inputType);
257+
CanType openedType = OpenedArchetypeType::getAny(inputType)
258+
->getCanonicalType();
258259
SILType loweredOpenedType = getLoweredType(openedType);
259260

260261
input = emitOpenExistential(loc, input,
@@ -641,8 +642,8 @@ ManagedValue Transform::transform(ManagedValue v,
641642

642643
auto layout = instanceType.getExistentialLayout();
643644
if (layout.getSuperclass()) {
644-
CanType openedType =
645-
OpenedArchetypeType::getAny(inputSubstType);
645+
CanType openedType = OpenedArchetypeType::getAny(inputSubstType)
646+
->getCanonicalType();
646647
SILType loweredOpenedType = SGF.getLoweredType(openedType);
647648

648649
FormalEvaluationScope scope(SGF);

lib/SILOptimizer/FunctionSignatureTransforms/ExistentialTransform.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -426,12 +426,9 @@ void ExistentialTransform::populateThunkBody() {
426426
if (iter != ArgToGenericTypeMap.end() &&
427427
it != ExistentialArgDescriptor.end()) {
428428
ExistentialTransformArgumentDescriptor &ETAD = it->second;
429-
OpenedArchetypeType *Opened;
430429
auto OrigOperand = ThunkBody->getArgument(ArgDesc.Index);
431430
auto SwiftType = ArgDesc.Arg->getType().getASTType();
432-
auto OpenedType =
433-
SwiftType
434-
->openAnyExistentialType(Opened)
431+
auto OpenedType = OpenedArchetypeType::getAny(SwiftType)
435432
->getCanonicalType();
436433
auto OpenedSILType = NewF->getLoweredType(OpenedType);
437434
SILValue archetypeValue;

lib/SILOptimizer/Utils/DistributedActor.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,8 @@ void emitDistributedActorSystemWitnessCall(
3939

4040
// If the base is an existential open it.
4141
if (systemASTType->isAnyExistentialType()) {
42-
OpenedArchetypeType *opened;
43-
systemASTType = systemASTType->openAnyExistentialType(opened)
44-
->getCanonicalType();
42+
systemASTType = OpenedArchetypeType::getAny(systemASTType)
43+
->getCanonicalType();
4544
base = B.createOpenExistentialAddr(
4645
loc, base, F.getLoweredType(systemASTType),
4746
OpenedExistentialAccess::Immutable);

lib/Sema/ConstraintSystem.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -772,8 +772,12 @@ ConstraintLocator *ConstraintSystem::getOpenOpaqueLocator(
772772

773773
std::pair<Type, OpenedArchetypeType *> ConstraintSystem::openExistentialType(
774774
Type type, ConstraintLocator *locator) {
775-
OpenedArchetypeType *opened = nullptr;
776-
Type result = type->openAnyExistentialType(opened);
775+
Type result = OpenedArchetypeType::getAny(type);
776+
Type t = result;
777+
while (t->is<MetatypeType>())
778+
t = t->getMetatypeInstanceType();
779+
auto *opened = t->castTo<OpenedArchetypeType>();
780+
777781
assert(OpenedExistentialTypes.count(locator) == 0);
778782
OpenedExistentialTypes.insert({locator, opened});
779783
return {result, opened};

0 commit comments

Comments
 (0)