@@ -1181,8 +1181,47 @@ struct MetadataOrPack {
1181
1181
}
1182
1182
};
1183
1183
1184
+ // / Function object that produces substitutions for the generic parameters
1185
+ // / that occur within a mangled name, using the complete set of generic
1186
+ // / arguments "as written".
1187
+ // /
1188
+ // / Use with \c _getTypeByMangledName to decode potentially-generic types.
1189
+ class SubstGenericParametersFromWrittenArgs {
1190
+ // / The complete set of generic arguments.
1191
+ const llvm::SmallVectorImpl<const Metadata *> &allGenericArgs;
1192
+
1193
+ // / The counts of generic parameters at each level.
1194
+ const llvm::SmallVectorImpl<unsigned > &genericParamCounts;
1195
+
1196
+ public:
1197
+ // / Initialize a new function object to handle substitutions. Both
1198
+ // / parameters are references to vectors that must live longer than
1199
+ // / this function object.
1200
+ // /
1201
+ // / \param allGenericArgs The complete set of generic arguments, as written.
1202
+ // / This could come directly from "source" (where all generic arguments are
1203
+ // / encoded) or from metadata via gatherWrittenGenericArgs().
1204
+ // /
1205
+ // / \param genericParamCounts The count of generic parameters at each
1206
+ // / generic level, typically gathered by _gatherGenericParameterCounts.
1207
+ explicit SubstGenericParametersFromWrittenArgs (
1208
+ const llvm::SmallVectorImpl<const Metadata *> &allGenericArgs,
1209
+ const llvm::SmallVectorImpl<unsigned > &genericParamCounts)
1210
+ : allGenericArgs(allGenericArgs),
1211
+ genericParamCounts(genericParamCounts) {}
1212
+
1213
+ const Metadata *getMetadata (unsigned depth, unsigned index) const ;
1214
+ const WitnessTable *getWitnessTable (const Metadata *type,
1215
+ unsigned index) const ;
1216
+ };
1217
+
1184
1218
} // end anonymous namespace
1185
1219
1220
+ static void _gatherWrittenGenericArgs (
1221
+ const Metadata *metadata, const TypeContextDescriptor *description,
1222
+ llvm::SmallVectorImpl<const Metadata *> &allGenericArgs,
1223
+ Demangler &BorrowFrom);
1224
+
1186
1225
static llvm::Optional<TypeLookupError>
1187
1226
_gatherGenericParameters (const ContextDescriptor *context,
1188
1227
llvm::ArrayRef<const Metadata *> genericArgs,
@@ -1262,8 +1301,8 @@ _gatherGenericParameters(const ContextDescriptor *context,
1262
1301
1263
1302
// If we have a parent, gather it's generic arguments "as written".
1264
1303
if (parent) {
1265
- gatherWrittenGenericArgs (parent, parent->getTypeContextDescriptor (),
1266
- allGenericArgs, demangler);
1304
+ _gatherWrittenGenericArgs (parent, parent->getTypeContextDescriptor (),
1305
+ allGenericArgs, demangler);
1267
1306
}
1268
1307
1269
1308
// Add the generic arguments we were given.
@@ -2883,7 +2922,7 @@ demangleToGenericParamRef(StringRef typeName) {
2883
2922
node->getChild (1 )->getIndex ());
2884
2923
}
2885
2924
2886
- void swift::gatherWrittenGenericArgs (
2925
+ static void _gatherWrittenGenericArgs (
2887
2926
const Metadata *metadata, const TypeContextDescriptor *description,
2888
2927
llvm::SmallVectorImpl<const Metadata *> &allGenericArgs,
2889
2928
Demangler &BorrowFrom) {
0 commit comments