@@ -5336,50 +5336,53 @@ CanTypeWrapper<OpenedArchetypeType> OpenedArchetypeType::getNew(
5336
5336
}
5337
5337
5338
5338
CanTypeWrapper<OpenedArchetypeType>
5339
- OpenedArchetypeType::get (CanType existential, GenericSignature parentSig,
5340
- std::optional<UUID> knownID) {
5339
+ OpenedArchetypeType::get (CanType existential, std::optional<UUID> knownID) {
5341
5340
assert (existential->isExistentialType ());
5342
5341
auto interfaceType = OpenedArchetypeType::getSelfInterfaceTypeFromContext (
5343
- parentSig , existential->getASTContext ());
5344
- return get (existential, interfaceType, parentSig, knownID);
5342
+ GenericSignature () , existential->getASTContext ());
5343
+ return get (existential, interfaceType, knownID);
5345
5344
}
5346
5345
5347
5346
CanOpenedArchetypeType OpenedArchetypeType::get (CanType existential,
5348
5347
Type interfaceType,
5349
- GenericSignature parentSig,
5350
5348
std::optional<UUID> knownID) {
5351
- assert (!interfaceType-> hasArchetype () && " must be interface type " );
5349
+ assert (!existential-> hasTypeParameter () );
5352
5350
5353
5351
if (!knownID)
5354
5352
knownID = UUID::fromTime ();
5355
5353
5356
5354
auto *genericEnv =
5357
- GenericEnvironment::forOpenedExistential (existential, parentSig, *knownID);
5355
+ GenericEnvironment::forOpenedExistential (
5356
+ existential, GenericSignature (), *knownID);
5358
5357
5359
5358
// Map the interface type into that environment.
5360
5359
auto result = genericEnv->mapTypeIntoContext (interfaceType)
5361
5360
->castTo <OpenedArchetypeType>();
5362
5361
return CanOpenedArchetypeType (result);
5363
5362
}
5364
5363
5365
- CanType OpenedArchetypeType::getAny (CanType existential, Type interfaceType,
5366
- GenericSignature parentSig) {
5364
+ Type OpenedArchetypeType::getAny (Type existential, Type interfaceTy) {
5367
5365
assert (existential->isAnyExistentialType ());
5368
5366
if (auto metatypeTy = existential->getAs <ExistentialMetatypeType>()) {
5369
5367
auto instanceTy =
5370
5368
metatypeTy->getExistentialInstanceType ()->getCanonicalType ();
5371
- return CanMetatypeType::get (
5372
- OpenedArchetypeType::getAny (instanceTy, interfaceType, parentSig));
5369
+ auto openedInstanceTy = OpenedArchetypeType::getAny (
5370
+ instanceTy, interfaceTy);
5371
+ if (metatypeTy->hasRepresentation ()) {
5372
+ return MetatypeType::get (openedInstanceTy,
5373
+ metatypeTy->getRepresentation ());
5374
+ }
5375
+ return MetatypeType::get (openedInstanceTy);
5373
5376
}
5374
5377
assert (existential->isExistentialType ());
5375
- return OpenedArchetypeType::get (existential, interfaceType, parentSig);
5378
+ return OpenedArchetypeType::get (existential->getCanonicalType (),
5379
+ interfaceTy);
5376
5380
}
5377
5381
5378
- CanType OpenedArchetypeType::getAny (CanType existential,
5379
- GenericSignature parentSig) {
5382
+ Type OpenedArchetypeType::getAny (Type existential) {
5380
5383
auto interfaceTy = OpenedArchetypeType::getSelfInterfaceTypeFromContext (
5381
- parentSig , existential->getASTContext ());
5382
- return getAny (existential, interfaceTy, parentSig );
5384
+ GenericSignature () , existential->getASTContext ());
5385
+ return getAny (existential, interfaceTy);
5383
5386
}
5384
5387
5385
5388
void SubstitutionMap::Storage::Profile (
0 commit comments