Skip to content

Commit 243dbc0

Browse files
committed
AST: Add a new overload of getContextSubstitutionMap()
1 parent 92c4fea commit 243dbc0

25 files changed

+54
-66
lines changed

include/swift/AST/Types.h

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1289,26 +1289,22 @@ class alignas(1 << TypeAlignInBits) TypeBase
12891289
/// Otherwise, it returns the type itself.
12901290
Type getReferenceStorageReferent();
12911291

1292-
/// Determine the set of substitutions that should be applied to a
1293-
/// type spelled within the given DeclContext to treat it as a
1294-
/// member of this type.
1292+
/// Assumes this is a nominal type. Returns a substitution map that sends each
1293+
/// generic parameter of the declaration's generic signature to the corresponding
1294+
/// generic argument of this nominal type.
12951295
///
1296-
/// For example, given:
1297-
/// \code
1298-
/// struct X<T, U> { }
1299-
/// extension X {
1300-
/// typealias SomeArray = [T]
1301-
/// }
1302-
/// \endcode
1296+
/// Eg: Array<Int> ---> { Element := Int }
1297+
SubstitutionMap getContextSubstitutionMap();
1298+
1299+
/// More general form of the above that handles additional cases:
13031300
///
1304-
/// Asking for the member substitutions of \c X<Int,String> within
1305-
/// the context of the extension above will produce substitutions T
1306-
/// -> Int and U -> String suitable for mapping the type of
1307-
/// \c SomeArray.
1301+
/// 1) dc is the nominal type itself or an unconstrained extension
1302+
/// 2) dc is a superclass
1303+
/// 3) dc is a protocol
13081304
///
1309-
/// \param genericEnv If non-null and the type is nested inside of a
1310-
/// generic function, generic parameters of the outer context are
1311-
/// mapped to context archetypes of this generic environment.
1305+
/// In Case 2) and 3), the substitution map has the generic signature of the dc,
1306+
/// and not the nominal. In Case 1), this is the same as the no-argument overload
1307+
/// of getContextSubstitutionMap().
13121308
SubstitutionMap getContextSubstitutionMap(const DeclContext *dc,
13131309
GenericEnvironment *genericEnv=nullptr);
13141310

include/swift/SILOptimizer/OptimizerBridgingImpl.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -415,8 +415,7 @@ void BridgedPassContext::loadFunction(BridgedFunction function, bool loadCallees
415415

416416
BridgedSubstitutionMap BridgedPassContext::getContextSubstitutionMap(BridgedType type) const {
417417
swift::SILType ty = type.unbridged();
418-
auto *ntd = ty.getASTType()->getAnyNominal();
419-
return ty.getASTType()->getContextSubstitutionMap(ntd);
418+
return ty.getASTType()->getContextSubstitutionMap();
420419
}
421420

422421
BridgedType BridgedPassContext::getBuiltinIntegerType(SwiftInt bitWidth) const {

lib/AST/ASTMangler.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1976,10 +1976,9 @@ void ASTMangler::appendRetroactiveConformances(Type type, GenericSignature sig)
19761976
if (type->hasUnboundGenericType())
19771977
return;
19781978

1979-
auto nominal = type->getAnyNominal();
1980-
if (!nominal) return;
1979+
if (!type->getAnyNominal()) return;
19811980

1982-
subMap = type->getContextSubstitutionMap(nominal);
1981+
subMap = type->getContextSubstitutionMap();
19831982
}
19841983

19851984
appendRetroactiveConformances(subMap, sig);

lib/AST/Type.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3043,8 +3043,7 @@ getForeignRepresentable(Type type, ForeignLanguage language,
30433043
auto specialized = type->getASTContext()
30443044
.getSpecializedConformance(type,
30453045
cast<NormalProtocolConformance>(result.getConformance()),
3046-
boundGenericType->getContextSubstitutionMap(
3047-
boundGenericType->getDecl()));
3046+
boundGenericType->getContextSubstitutionMap());
30483047
result = ForeignRepresentationInfo::forBridged(specialized);
30493048
}
30503049
}

lib/AST/TypeSubstitution.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -805,6 +805,10 @@ TypeBase::getContextSubstitutions(const DeclContext *dc,
805805
return substitutions;
806806
}
807807

808+
SubstitutionMap TypeBase::getContextSubstitutionMap() {
809+
return getContextSubstitutionMap(getAnyNominal(), nullptr);
810+
}
811+
808812
SubstitutionMap TypeBase::getContextSubstitutionMap(
809813
const DeclContext *dc,
810814
GenericEnvironment *genericEnv) {

lib/IRGen/Fulfillment.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,7 @@ bool FulfillmentMap::searchNominalTypeMetadata(IRGenModule &IGM,
361361

362362
bool hadFulfillment = false;
363363

364-
auto subs = type->getContextSubstitutionMap(nominal);
364+
auto subs = type->getContextSubstitutionMap();
365365

366366
GenericTypeRequirements requirements(IGM, nominal);
367367

lib/IRGen/GenMeta.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4929,7 +4929,7 @@ namespace {
49294929
}
49304930

49314931
SubstitutionMap genericSubstitutions() {
4932-
return type->getContextSubstitutionMap(type->getAnyNominal());
4932+
return type->getContextSubstitutionMap();
49334933
}
49344934

49354935
MetadataTrailingFlags getTrailingFlags() {

lib/IRGen/GenProto.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2989,7 +2989,7 @@ MetadataResponse MetadataPath::followComponent(IRGenFunction &IGF,
29892989
GenericTypeRequirements requirements(IGF.IGM, nominal);
29902990
auto &requirement = requirements.getRequirements()[reqtIndex];
29912991

2992-
auto subs = sourceKey.Type->getContextSubstitutionMap(nominal);
2992+
auto subs = type->getContextSubstitutionMap();
29932993
auto sub = requirement.getTypeParameter().subst(subs)->getCanonicalType();
29942994

29952995
// In either case, we need to change the type.

lib/IRGen/GenRecord.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ class RecordTypeInfoImpl : public Base,
209209
if (auto likeType = rawLayout->getResolvedScalarLikeType(structDecl)) {
210210
if (rawLayout->shouldMoveAsLikeType()) {
211211
auto astT = T.getASTType();
212-
auto subs = astT->getContextSubstitutionMap(structDecl);
212+
auto subs = astT->getContextSubstitutionMap();
213213
auto loweredLikeType = IGF.IGM.getLoweredType(likeType->subst(subs));
214214
auto &likeTypeInfo = IGF.IGM.getTypeInfo(loweredLikeType);
215215

@@ -286,7 +286,7 @@ class RecordTypeInfoImpl : public Base,
286286
if (auto likeType = rawLayout->getResolvedScalarLikeType(structDecl)) {
287287
if (rawLayout->shouldMoveAsLikeType()) {
288288
auto astT = T.getASTType();
289-
auto subs = astT->getContextSubstitutionMap(structDecl);
289+
auto subs = astT->getContextSubstitutionMap();
290290
auto loweredLikeType = IGF.IGM.getLoweredType(likeType->subst(subs));
291291
auto &likeTypeInfo = IGF.IGM.getTypeInfo(loweredLikeType);
292292

lib/IRGen/GenType.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2942,7 +2942,7 @@ static bool tryEmitDeinitCall(IRGenFunction &IGF,
29422942
&& !deinitTy->hasError()
29432943
&& "deinit should have only one parameter");
29442944

2945-
auto substitutions = ty->getContextSubstitutionMap(nominal);
2945+
auto substitutions = ty->getContextSubstitutionMap();
29462946

29472947
CalleeInfo info(deinitTy,
29482948
deinitTy->substGenericArgs(IGF.getSILModule(),

lib/IRGen/GenericArguments.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,7 @@ struct GenericArguments {
6464
}
6565

6666
void collect(IRGenFunction &IGF, CanType type) {
67-
auto decl = type.getNominalOrBoundGenericNominal();
68-
auto subs = type->getContextSubstitutionMap(decl);
67+
auto subs = type->getContextSubstitutionMap();
6968
collect(IGF, subs);
7069
}
7170

lib/IRGen/MetadataRequest.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -870,7 +870,7 @@ bool irgen::isSpecializedNominalTypeMetadataStaticallyAddressable(
870870

871871
// Analyze the substitution map to determine if everything can be referenced
872872
// statically.
873-
auto substitutions = type->getContextSubstitutionMap(nominal);
873+
auto substitutions = type->getContextSubstitutionMap();
874874

875875
// If we cannot statically reference type metadata for our replacement types,
876876
// we cannot specialize.
@@ -2719,7 +2719,7 @@ irgen::emitCanonicalSpecializedGenericTypeMetadataAccessFunction(
27192719
assert(!theType->hasUnboundGenericType());
27202720

27212721
auto requirements = GenericTypeRequirements(IGF.IGM, nominal);
2722-
auto substitutions = theType->getContextSubstitutionMap(nominal);
2722+
auto substitutions = theType->getContextSubstitutionMap();
27232723
for (auto requirement : requirements.getRequirements()) {
27242724
if (requirement.isAnyWitnessTable()) {
27252725
continue;

lib/IRGen/StructLayout.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ StructLayout::StructLayout(IRGenModule &IGM, std::optional<CanType> type,
115115
// If our likeType is dependent, then all calls to try and lay it out will
116116
// be non-fixed, but in a concrete case we want a fixed layout, so try to
117117
// substitute it out.
118-
auto subs = (*type)->getContextSubstitutionMap(decl);
118+
auto subs = (*type)->getContextSubstitutionMap();
119119
auto loweredLikeType = IGM.getLoweredType(likeType->subst(subs));
120120
const TypeInfo &likeTypeInfo = IGM.getTypeInfo(loweredLikeType);
121121

@@ -151,7 +151,7 @@ StructLayout::StructLayout(IRGenModule &IGM, std::optional<CanType> type,
151151
auto elementType = likeArray->first;
152152
unsigned count = likeArray->second;
153153

154-
auto subs = (*type)->getContextSubstitutionMap(decl);
154+
auto subs = (*type)->getContextSubstitutionMap();
155155
auto loweredElementType = IGM.getLoweredType(elementType.subst(subs));
156156
const TypeInfo &likeTypeInfo = IGM.getTypeInfo(loweredElementType);
157157

lib/SIL/IR/TypeLowering.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2433,7 +2433,7 @@ namespace {
24332433
return handleAddressOnly(structType, properties);
24342434
}
24352435

2436-
auto subMap = structType->getContextSubstitutionMap(D);
2436+
auto subMap = structType->getContextSubstitutionMap();
24372437

24382438
// Classify the type according to its stored properties.
24392439
for (auto field : D->getStoredProperties()) {
@@ -2530,7 +2530,7 @@ namespace {
25302530
Expansion);
25312531
}
25322532

2533-
auto subMap = enumType->getContextSubstitutionMap(D);
2533+
auto subMap = enumType->getContextSubstitutionMap();
25342534

25352535
// Accumulate the properties of all direct payloads.
25362536
for (auto elt : D->getAllElements()) {
@@ -2936,7 +2936,7 @@ bool TypeConverter::visitAggregateLeaves(
29362936
field, index);
29372937
} else if (auto *decl = ty.getStructOrBoundGenericStruct()) {
29382938
for (auto *structField : decl->getStoredProperties()) {
2939-
auto subMap = ty->getContextSubstitutionMap(decl);
2939+
auto subMap = ty->getContextSubstitutionMap();
29402940
auto substFieldTy =
29412941
structField->getInterfaceType().subst(subMap)->getCanonicalType();
29422942
auto sig =
@@ -2950,7 +2950,7 @@ bool TypeConverter::visitAggregateLeaves(
29502950
std::nullopt);
29512951
}
29522952
} else if (auto *decl = ty.getEnumOrBoundGenericEnum()) {
2953-
auto subMap = ty->getContextSubstitutionMap(decl);
2953+
auto subMap = ty->getContextSubstitutionMap();
29542954
for (auto *element : decl->getAllElements()) {
29552955
if (!element->hasAssociatedValues())
29562956
continue;
@@ -5063,8 +5063,7 @@ CanSILBoxType TypeConverter::getBoxTypeForEnumElement(
50635063
/*captures generics*/ false);
50645064

50655065
// Instantiate the layout with enum's substitution list.
5066-
auto subMap = boundEnum->getContextSubstitutionMap(
5067-
enumDecl, enumDecl->getGenericEnvironment());
5066+
auto subMap = boundEnum->getContextSubstitutionMap();
50685067

50695068
auto boxTy = SILBoxType::get(C, layout, subMap);
50705069
return boxTy;

lib/SILGen/SILGenApply.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6622,7 +6622,7 @@ SILGenFunction::emitUninitializedArrayAllocation(Type ArrayTy,
66226622
auto allocate = Ctx.getAllocateUninitializedArray();
66236623

66246624
// Invoke the intrinsic, which returns a tuple.
6625-
auto subMap = ArrayTy->getContextSubstitutionMap(Ctx.getArrayDecl());
6625+
auto subMap = ArrayTy->getContextSubstitutionMap();
66266626
auto result = emitApplyOfLibraryIntrinsic(
66276627
Loc, allocate, subMap,
66286628
ManagedValue::forObjectRValueWithoutOwnership(Length), SGFContext());
@@ -6647,7 +6647,7 @@ void SILGenFunction::emitUninitializedArrayDeallocation(SILLocation loc,
66476647
CanType arrayTy = array->getType().getASTType();
66486648

66496649
// Invoke the intrinsic.
6650-
auto subMap = arrayTy->getContextSubstitutionMap(Ctx.getArrayDecl());
6650+
auto subMap = arrayTy->getContextSubstitutionMap();
66516651
emitApplyOfLibraryIntrinsic(loc, deallocate, subMap,
66526652
ManagedValue::forUnmanagedOwnedValue(array),
66536653
SGFContext());
@@ -6670,7 +6670,7 @@ ManagedValue SILGenFunction::emitUninitializedArrayFinalization(SILLocation loc,
66706670
CanType arrayTy = arrayVal->getType().getASTType();
66716671

66726672
// Invoke the intrinsic.
6673-
auto subMap = arrayTy->getContextSubstitutionMap(Ctx.getArrayDecl());
6673+
auto subMap = arrayTy->getContextSubstitutionMap();
66746674
RValue result = emitApplyOfLibraryIntrinsic(
66756675
loc, finalize, subMap, ManagedValue::forUnmanagedOwnedValue(arrayVal),
66766676
SGFContext());

lib/SILGen/SILGenConcurrency.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ SILGenFunction::emitLoadOfGlobalActorShared(SILLocation loc, CanType actorType)
257257
VarDecl *sharedInstanceDecl = nominal->getGlobalActorInstance();
258258
assert(sharedInstanceDecl && "no shared actor field in global actor");
259259
SubstitutionMap subs =
260-
actorType->getContextSubstitutionMap(nominal);
260+
actorType->getContextSubstitutionMap();
261261
Type instanceType =
262262
actorType->getTypeOfMember(sharedInstanceDecl);
263263

lib/SILGen/SILGenExpr.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6355,7 +6355,7 @@ SILGenFunction::emitArrayToPointer(SILLocation loc, ManagedValue array,
63556355

63566356
// Invoke the conversion intrinsic, which will produce an owner-pointer pair.
63576357
auto firstSubMap =
6358-
accessInfo.ArrayType->getContextSubstitutionMap(ctx.getArrayDecl());
6358+
accessInfo.ArrayType->getContextSubstitutionMap();
63596359
auto secondSubMap = accessInfo.PointerType->getContextSubstitutionMap(
63606360
getPointerProtocol());
63616361

lib/SILGen/SILGenLValue.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2406,8 +2406,7 @@ namespace {
24062406
}
24072407

24082408
auto keyPathTy = keyPathValue.getType().castTo<BoundGenericType>();
2409-
auto subs = keyPathTy->getContextSubstitutionMap(
2410-
keyPathTy->getDecl());
2409+
auto subs = keyPathTy->getContextSubstitutionMap();
24112410

24122411
auto origType = AbstractionPattern::getOpaque();
24132412
auto loweredTy = SGF.getLoweredType(origType, value.getSubstRValueType());
@@ -2481,8 +2480,7 @@ namespace {
24812480
auto projectFnType = projectFn->getLoweredFunctionType();
24822481

24832482
auto keyPathTy = keyPathValue.getType().castTo<BoundGenericType>();
2484-
auto subs = keyPathTy->getContextSubstitutionMap(
2485-
keyPathTy->getDecl());
2483+
auto subs = keyPathTy->getContextSubstitutionMap();
24862484

24872485
auto substFnType = projectFnType->substGenericArgs(
24882486
SGF.SGM.M, subs, SGF.getTypeExpansionContext());

lib/SILGen/SILGenLazyConformance.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ void SILGenModule::useConformancesFromType(CanType type) {
113113
if (!genericSig)
114114
return;
115115

116-
auto subMap = t->getContextSubstitutionMap(decl);
116+
auto subMap = t->getContextSubstitutionMap();
117117
useConformancesFromSubstitutions(subMap);
118118
return;
119119
});

lib/SILOptimizer/Mandatory/OSLogOptimization.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -518,8 +518,7 @@ static SILValue emitCodeForConstantArray(ArrayRef<SILValue> elements,
518518
// call returns a two-element tuple, where the first element is the newly
519519
// created array and the second element is a pointer to the internal storage
520520
// of the array.
521-
SubstitutionMap subMap = arrayType->getContextSubstitutionMap(
522-
astContext.getArrayDecl());
521+
SubstitutionMap subMap = arrayType->getContextSubstitutionMap();
523522
FunctionRefInst *arrayAllocateRef =
524523
builder.createFunctionRef(loc, arrayAllocateFun);
525524
ApplyInst *applyInst = builder.createApply(

lib/SILOptimizer/Transforms/ArrayElementValuePropagation.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -325,9 +325,8 @@ bool ArrayAllocation::replaceAppendContentOf() {
325325
continue;
326326

327327
SILType ArrayType = ArrayValue->getType();
328-
auto *NTD = ArrayType.getASTType()->getAnyNominal();
329328
SubstitutionMap ArraySubMap = ArrayType.getASTType()
330-
->getContextSubstitutionMap(NTD);
329+
->getContextSubstitutionMap();
331330

332331
AppendContentsOf.replaceByAppendingValues(AppendFn, ReserveFn,
333332
ElementValueVector,

lib/SILOptimizer/Transforms/VTableSpecializer.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ SILVTable *swift::specializeVTableForType(SILType classTy, SILModule &module,
173173
return nullptr;
174174
}
175175

176-
SubstitutionMap subs = astType->getContextSubstitutionMap(classDecl);
176+
SubstitutionMap subs = astType->getContextSubstitutionMap();
177177

178178
llvm::SmallVector<SILVTableEntry, 8> newEntries;
179179

@@ -247,8 +247,7 @@ bool swift::specializeClassMethodInst(ClassMethodInst *cm) {
247247
BoundGenericClassType *genClassTy = dyn_cast<BoundGenericClassType>(astType);
248248
if (!genClassTy) return false;
249249

250-
ClassDecl *classDecl = genClassTy->getDecl();
251-
SubstitutionMap subs = astType->getContextSubstitutionMap(classDecl);
250+
SubstitutionMap subs = astType->getContextSubstitutionMap();
252251

253252
SILType funcTy = cm->getType();
254253
SILType substitutedType =

lib/Sema/TypeCheckAttr.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3778,8 +3778,6 @@ TypeEraserHasViableInitRequest::evaluate(Evaluator &evaluator,
37783778

37793779
// The type eraser must be a concrete nominal type
37803780
auto nominalTypeDecl = typeEraser->getAnyNominal();
3781-
if (auto typeAliasDecl = dyn_cast_or_null<TypeAliasDecl>(nominalTypeDecl))
3782-
nominalTypeDecl = typeAliasDecl->getUnderlyingType()->getAnyNominal();
37833781

37843782
if (!nominalTypeDecl || isa<ProtocolDecl>(nominalTypeDecl)) {
37853783
diags.diagnose(attr->getLoc(), diag::non_nominal_type_eraser);
@@ -3841,7 +3839,7 @@ TypeEraserHasViableInitRequest::evaluate(Evaluator &evaluator,
38413839
// substituting the protocol's Self type for the generic arg and check that
38423840
// the requirements in the generic signature are satisfied.
38433841
auto baseMap =
3844-
typeEraser->getContextSubstitutionMap(nominalTypeDecl);
3842+
typeEraser->getContextSubstitutionMap();
38453843
QuerySubstitutionMap getSubstitution{baseMap};
38463844

38473845
auto result = checkRequirements(

lib/Sema/TypeCheckAvailability.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4235,15 +4235,15 @@ class ProblematicTypeFinder : public TypeDeclFinder {
42354235
if (isa<ProtocolType>(ty))
42364236
return Action::Continue;
42374237

4238-
auto subs = ty->getContextSubstitutionMap(ty->getDecl());
4238+
auto subs = ty->getContextSubstitutionMap();
42394239
(void) diagnoseSubstitutionMapAvailability(Loc, subs, Where);
42404240
return Action::Continue;
42414241
}
42424242

42434243
Action visitBoundGenericType(BoundGenericType *ty) override {
42444244
visitTypeDecl(ty->getDecl());
42454245

4246-
auto subs = ty->getContextSubstitutionMap(ty->getDecl());
4246+
auto subs = ty->getContextSubstitutionMap();
42474247
(void)diagnoseSubstitutionMapAvailability(
42484248
Loc, subs, Where,
42494249
/*depTy=*/Type(),

lib/Sema/TypeCheckCircularity.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ bool CircularityChecker::expandStruct(CanType type, StructDecl *S,
249249
unsigned depth) {
250250
startExpandingType(type);
251251

252-
auto subMap = type->getContextSubstitutionMap(S);
252+
auto subMap = type->getContextSubstitutionMap();
253253

254254
for (auto field: S->getStoredProperties()) {
255255
auto fieldType =field->getValueInterfaceType().subst(subMap);
@@ -272,7 +272,7 @@ bool CircularityChecker::expandEnum(CanType type, EnumDecl *E,
272272

273273
startExpandingType(type);
274274

275-
auto subMap = type->getContextSubstitutionMap(E);
275+
auto subMap = type->getContextSubstitutionMap();
276276

277277
for (auto elt: E->getAllElements()) {
278278
// Indirect elements are representational leaves.

0 commit comments

Comments
 (0)