Skip to content

Commit 5824b0f

Browse files
committed
MetadataReader: Factor out readNominalTypeFromClassMetadata() to clean up the code flow
1 parent 61f57a0 commit 5824b0f

File tree

1 file changed

+26
-22
lines changed

1 file changed

+26
-22
lines changed

include/swift/Remote/MetadataReader.h

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -496,28 +496,8 @@ class MetadataReader {
496496
if (!Meta) return BuiltType();
497497

498498
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);
521501
case MetadataKind::Struct:
522502
case MetadataKind::Enum:
523503
case MetadataKind::Optional:
@@ -2283,6 +2263,30 @@ class MetadataReader {
22832263
return nominal;
22842264
}
22852265

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+
22862290
/// Given that the remote process is running the non-fragile Apple runtime,
22872291
/// grab the ro-data from a class pointer.
22882292
StoredPointer readObjCRODataPtr(StoredPointer classAddress) {

0 commit comments

Comments
 (0)