@@ -496,28 +496,8 @@ class MetadataReader {
496
496
if (!Meta) return BuiltType ();
497
497
498
498
switch (Meta->getKind ()) {
499
- case MetadataKind::Class: {
500
- auto classMeta = cast<TargetClassMetadata<Runtime>>(Meta);
501
- if (!classMeta->isTypeMetadata ()) {
502
- std::string className;
503
- if (!readObjCClassName (MetadataAddress, className))
504
- return BuiltType ();
505
-
506
- BuiltType BuiltObjCClass = Builder.createObjCClassType (std::move (className));
507
- if (!BuiltObjCClass) {
508
- // Try the superclass.
509
- if (!classMeta->Superclass )
510
- return BuiltType ();
511
-
512
- BuiltObjCClass = readTypeFromMetadata (classMeta->Superclass ,
513
- skipArtificialSubclasses);
514
- }
515
-
516
- TypeCache[MetadataAddress] = BuiltObjCClass;
517
- return BuiltObjCClass;
518
- }
519
- return readNominalTypeFromMetadata (Meta, skipArtificialSubclasses);
520
- }
499
+ case MetadataKind::Class:
500
+ return readNominalTypeFromClassMetadata (Meta, skipArtificialSubclasses);
521
501
case MetadataKind::Struct:
522
502
case MetadataKind::Enum:
523
503
case MetadataKind::Optional:
@@ -2283,6 +2263,30 @@ class MetadataReader {
2283
2263
return nominal;
2284
2264
}
2285
2265
2266
+ BuiltType readNominalTypeFromClassMetadata (MetadataRef origMetadata,
2267
+ bool skipArtificialSubclasses = false ) {
2268
+ auto classMeta = cast<TargetClassMetadata<Runtime>>(origMetadata);
2269
+ if (classMeta->isTypeMetadata ())
2270
+ return readNominalTypeFromMetadata (origMetadata, skipArtificialSubclasses);
2271
+
2272
+ std::string className;
2273
+ if (!readObjCClassName (origMetadata.getAddress (), className))
2274
+ return BuiltType ();
2275
+
2276
+ BuiltType BuiltObjCClass = Builder.createObjCClassType (std::move (className));
2277
+ if (!BuiltObjCClass) {
2278
+ // Try the superclass.
2279
+ if (!classMeta->Superclass )
2280
+ return BuiltType ();
2281
+
2282
+ BuiltObjCClass = readTypeFromMetadata (classMeta->Superclass ,
2283
+ skipArtificialSubclasses);
2284
+ }
2285
+
2286
+ TypeCache[origMetadata.getAddress ()] = BuiltObjCClass;
2287
+ return BuiltObjCClass;
2288
+ }
2289
+
2286
2290
// / Given that the remote process is running the non-fragile Apple runtime,
2287
2291
// / grab the ro-data from a class pointer.
2288
2292
StoredPointer readObjCRODataPtr (StoredPointer classAddress) {
0 commit comments