@@ -5336,50 +5336,53 @@ CanTypeWrapper<OpenedArchetypeType> OpenedArchetypeType::getNew(
53365336}
53375337
53385338CanTypeWrapper<OpenedArchetypeType>
5339- OpenedArchetypeType::get (CanType existential, GenericSignature parentSig,
5340- std::optional<UUID> knownID) {
5339+ OpenedArchetypeType::get (CanType existential, std::optional<UUID> knownID) {
53415340 assert (existential->isExistentialType ());
53425341 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);
53455344}
53465345
53475346CanOpenedArchetypeType OpenedArchetypeType::get (CanType existential,
53485347 Type interfaceType,
5349- GenericSignature parentSig,
53505348 std::optional<UUID> knownID) {
5351- assert (!interfaceType-> hasArchetype () && " must be interface type " );
5349+ assert (!existential-> hasTypeParameter () );
53525350
53535351 if (!knownID)
53545352 knownID = UUID::fromTime ();
53555353
53565354 auto *genericEnv =
5357- GenericEnvironment::forOpenedExistential (existential, parentSig, *knownID);
5355+ GenericEnvironment::forOpenedExistential (
5356+ existential, GenericSignature (), *knownID);
53585357
53595358 // Map the interface type into that environment.
53605359 auto result = genericEnv->mapTypeIntoContext (interfaceType)
53615360 ->castTo <OpenedArchetypeType>();
53625361 return CanOpenedArchetypeType (result);
53635362}
53645363
5365- CanType OpenedArchetypeType::getAny (CanType existential, Type interfaceType,
5366- GenericSignature parentSig) {
5364+ Type OpenedArchetypeType::getAny (Type existential, Type interfaceTy) {
53675365 assert (existential->isAnyExistentialType ());
53685366 if (auto metatypeTy = existential->getAs <ExistentialMetatypeType>()) {
53695367 auto instanceTy =
53705368 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);
53735376 }
53745377 assert (existential->isExistentialType ());
5375- return OpenedArchetypeType::get (existential, interfaceType, parentSig);
5378+ return OpenedArchetypeType::get (existential->getCanonicalType (),
5379+ interfaceTy);
53765380}
53775381
5378- CanType OpenedArchetypeType::getAny (CanType existential,
5379- GenericSignature parentSig) {
5382+ Type OpenedArchetypeType::getAny (Type existential) {
53805383 auto interfaceTy = OpenedArchetypeType::getSelfInterfaceTypeFromContext (
5381- parentSig , existential->getASTContext ());
5382- return getAny (existential, interfaceTy, parentSig );
5384+ GenericSignature () , existential->getASTContext ());
5385+ return getAny (existential, interfaceTy);
53835386}
53845387
53855388void SubstitutionMap::Storage::Profile (
0 commit comments