@@ -582,68 +582,66 @@ class MetadataReader {
582
582
if (!Reader->readInteger (RemoteAddress (address), &KindValue))
583
583
return nullptr ;
584
584
585
- auto Kind = static_cast <MetadataKind>(KindValue);
586
-
587
- if (metadataKindIsClass (Kind)) {
585
+ switch (getEnumeratedMetadataKind (KindValue)) {
586
+ case MetadataKind::Class:
588
587
return _readMetadata<TargetClassMetadata<Runtime>>(address);
589
- } else {
590
- switch (Kind) {
591
- case MetadataKind::Enum:
592
- return _readMetadata<TargetEnumMetadata<Runtime>>(address);
593
- case MetadataKind::ErrorObject:
594
- return _readMetadata<TargetEnumMetadata<Runtime>>(address);
595
- case MetadataKind::Existential: {
596
- StoredPointer NumProtocolsAddress = address +
597
- TargetExistentialTypeMetadata<Runtime>::OffsetToNumProtocols;
598
- StoredPointer NumProtocols;
599
- if (!Reader->readInteger (RemoteAddress (NumProtocolsAddress),
600
- &NumProtocols))
601
- return nullptr ;
602
-
603
- auto TotalSize = sizeof (TargetExistentialTypeMetadata<Runtime>) +
604
- NumProtocols *
605
- sizeof (ConstTargetMetadataPointer<Runtime, TargetProtocolDescriptor>);
606
-
607
- return _readMetadata<TargetExistentialTypeMetadata<Runtime>>(address,
608
- TotalSize);
609
- }
610
- case MetadataKind::ExistentialMetatype:
611
- return _readMetadata<
612
- TargetExistentialMetatypeMetadata<Runtime>>(address);
613
- case MetadataKind::ForeignClass:
614
- return _readMetadata<TargetForeignClassMetadata<Runtime>>(address);
615
- case MetadataKind::Function:
616
- return _readMetadata<TargetFunctionTypeMetadata<Runtime>>(address);
617
- case MetadataKind::HeapGenericLocalVariable:
618
- return _readMetadata<TargetHeapLocalVariableMetadata<Runtime>>(address);
619
- case MetadataKind::HeapLocalVariable:
620
- return _readMetadata<TargetHeapLocalVariableMetadata<Runtime>>(address);
621
- case MetadataKind::Metatype:
622
- return _readMetadata<TargetMetatypeMetadata<Runtime>>(address);
623
- case MetadataKind::ObjCClassWrapper:
624
- return _readMetadata<TargetObjCClassWrapperMetadata<Runtime>>(address);
625
- case MetadataKind::Opaque:
626
- return _readMetadata<TargetOpaqueMetadata<Runtime>>(address);
627
- case MetadataKind::Optional:
628
- return _readMetadata<TargetEnumMetadata<Runtime>>(address);
629
- case MetadataKind::Struct:
630
- return _readMetadata<TargetStructMetadata<Runtime>>(address);
631
- case MetadataKind::Tuple: {
632
- auto NumElementsAddress = address +
633
- TargetTupleTypeMetadata<Runtime>::OffsetToNumElements;
634
- StoredSize NumElements;
635
- if (!Reader->readInteger (RemoteAddress (NumElementsAddress),
636
- &NumElements))
637
- return nullptr ;
638
- auto TotalSize = sizeof (TargetTupleTypeMetadata<Runtime>) +
639
- NumElements * sizeof (StoredPointer);
640
- return _readMetadata<TargetTupleTypeMetadata<Runtime>>(address,
641
- TotalSize);
642
- }
643
- default :
588
+ case MetadataKind::Enum:
589
+ return _readMetadata<TargetEnumMetadata<Runtime>>(address);
590
+ case MetadataKind::ErrorObject:
591
+ return _readMetadata<TargetEnumMetadata<Runtime>>(address);
592
+ case MetadataKind::Existential: {
593
+ StoredPointer NumProtocolsAddress = address +
594
+ TargetExistentialTypeMetadata<Runtime>::OffsetToNumProtocols;
595
+ StoredPointer NumProtocols;
596
+ if (!Reader->readInteger (RemoteAddress (NumProtocolsAddress),
597
+ &NumProtocols))
644
598
return nullptr ;
645
- }
599
+
600
+ auto TotalSize = sizeof (TargetExistentialTypeMetadata<Runtime>) +
601
+ NumProtocols *
602
+ sizeof (ConstTargetMetadataPointer<Runtime, TargetProtocolDescriptor>);
603
+
604
+ return _readMetadata<TargetExistentialTypeMetadata<Runtime>>(address,
605
+ TotalSize);
646
606
}
607
+ case MetadataKind::ExistentialMetatype:
608
+ return _readMetadata<
609
+ TargetExistentialMetatypeMetadata<Runtime>>(address);
610
+ case MetadataKind::ForeignClass:
611
+ return _readMetadata<TargetForeignClassMetadata<Runtime>>(address);
612
+ case MetadataKind::Function:
613
+ return _readMetadata<TargetFunctionTypeMetadata<Runtime>>(address);
614
+ case MetadataKind::HeapGenericLocalVariable:
615
+ return _readMetadata<TargetHeapLocalVariableMetadata<Runtime>>(address);
616
+ case MetadataKind::HeapLocalVariable:
617
+ return _readMetadata<TargetHeapLocalVariableMetadata<Runtime>>(address);
618
+ case MetadataKind::Metatype:
619
+ return _readMetadata<TargetMetatypeMetadata<Runtime>>(address);
620
+ case MetadataKind::ObjCClassWrapper:
621
+ return _readMetadata<TargetObjCClassWrapperMetadata<Runtime>>(address);
622
+ case MetadataKind::Opaque:
623
+ return _readMetadata<TargetOpaqueMetadata<Runtime>>(address);
624
+ case MetadataKind::Optional:
625
+ return _readMetadata<TargetEnumMetadata<Runtime>>(address);
626
+ case MetadataKind::Struct:
627
+ return _readMetadata<TargetStructMetadata<Runtime>>(address);
628
+ case MetadataKind::Tuple: {
629
+ auto NumElementsAddress = address +
630
+ TargetTupleTypeMetadata<Runtime>::OffsetToNumElements;
631
+ StoredSize NumElements;
632
+ if (!Reader->readInteger (RemoteAddress (NumElementsAddress),
633
+ &NumElements))
634
+ return nullptr ;
635
+ auto TotalSize = sizeof (TargetTupleTypeMetadata<Runtime>) +
636
+ NumElements * sizeof (StoredPointer);
637
+ return _readMetadata<TargetTupleTypeMetadata<Runtime>>(address,
638
+ TotalSize);
639
+ }
640
+ }
641
+
642
+ // We can fall out here if the value wasn't actually a valid
643
+ // MetadataKind.
644
+ return nullptr ;
647
645
}
648
646
649
647
StoredPointer readAddressOfNominalTypeDescriptor (MetadataRef metadata) {
0 commit comments