@@ -1269,9 +1269,9 @@ TypeInfo swift_getTypeByMangledNameImpl(
1269
1269
substWitnessTable);
1270
1270
}
1271
1271
1272
- SWIFT_CC (swift) SWIFT_RUNTIME_STDLIB_INTERNAL
1272
+ SWIFT_CC (swift) SWIFT_RUNTIME_EXPORT
1273
1273
const Metadata * _Nullable
1274
- swift_stdlib_getTypeByMangledName (
1274
+ swift_getTypeByMangledNameInEnvironment (
1275
1275
const char *typeNameStart,
1276
1276
size_t typeNameLength,
1277
1277
const TargetGenericEnvironment<InProcess> *environment,
@@ -1285,6 +1285,22 @@ swift_stdlib_getTypeByMangledName(
1285
1285
return swift_checkMetadataState (MetadataState::Complete, metadata).Value ;
1286
1286
}
1287
1287
1288
+ SWIFT_CC (swift) SWIFT_RUNTIME_EXPORT
1289
+ const Metadata * _Nullable
1290
+ swift_getTypeByMangledNameInContext(
1291
+ const char *typeNameStart,
1292
+ size_t typeNameLength,
1293
+ const TargetContextDescriptor<InProcess> *context,
1294
+ const void * const *genericArgs) {
1295
+ llvm::StringRef typeName (typeNameStart, typeNameLength);
1296
+ SubstGenericParametersFromMetadata substitutions (context, genericArgs);
1297
+ auto metadata = swift_getTypeByMangledName (typeName, substitutions,
1298
+ substitutions);
1299
+ if (!metadata) return nullptr ;
1300
+
1301
+ return swift_checkMetadataState (MetadataState::Complete, metadata).Value ;
1302
+ }
1303
+
1288
1304
#if SWIFT_OBJC_INTEROP
1289
1305
1290
1306
// Return the ObjC class for the given type name.
@@ -1301,9 +1317,9 @@ static objc_hook_getClass OldGetClassHook;
1301
1317
static BOOL
1302
1318
getObjCClassByMangledName (const char * _Nonnull typeName,
1303
1319
Class _Nullable * _Nonnull outClass) {
1304
- auto metadata = swift_stdlib_getTypeByMangledName (typeName, strlen (typeName),
1305
- /* no substitutions */
1306
- nullptr , nullptr );
1320
+ auto metadata = swift_getTypeByMangledNameInEnvironment (typeName, strlen (typeName),
1321
+ /* no substitutions */
1322
+ nullptr , nullptr );
1307
1323
if (metadata) {
1308
1324
auto objcClass =
1309
1325
reinterpret_cast <Class>(
@@ -1421,9 +1437,8 @@ void SubstGenericParametersFromMetadata::setup() const {
1421
1437
if (!descriptorPath.empty ())
1422
1438
return ;
1423
1439
1424
- if (sourceIsMetadata && base) {
1425
- auto descriptor = base->getTypeContextDescriptor ();
1426
- numKeyGenericParameters = buildDescriptorPath (descriptor);
1440
+ if (sourceIsMetadata && baseContext) {
1441
+ numKeyGenericParameters = buildDescriptorPath (baseContext);
1427
1442
return ;
1428
1443
}
1429
1444
0 commit comments