@@ -2479,7 +2479,7 @@ struct TargetTypeMetadataRecord {
2479
2479
case TypeMetadataRecordKind::NonuniqueDirectType:
2480
2480
break ;
2481
2481
2482
- case TypeMetadataRecordKind::UniqueIndirectClass :
2482
+ case TypeMetadataRecordKind::IndirectObjCClass :
2483
2483
case TypeMetadataRecordKind::DirectNominalTypeDescriptor:
2484
2484
case TypeMetadataRecordKind::IndirectNominalTypeDescriptor:
2485
2485
assert (false && " not direct type metadata" );
@@ -2494,7 +2494,7 @@ struct TargetTypeMetadataRecord {
2494
2494
case TypeMetadataRecordKind::DirectNominalTypeDescriptor:
2495
2495
break ;
2496
2496
2497
- case TypeMetadataRecordKind::UniqueIndirectClass :
2497
+ case TypeMetadataRecordKind::IndirectObjCClass :
2498
2498
case TypeMetadataRecordKind::NonuniqueDirectType:
2499
2499
case TypeMetadataRecordKind::IndirectNominalTypeDescriptor:
2500
2500
assert (false && " not generic metadata pattern" );
@@ -2530,25 +2530,27 @@ struct TargetProtocolConformanceRecord {
2530
2530
2531
2531
// Some description of the type that conforms to the protocol.
2532
2532
union {
2533
+ // / A direct reference to a nominal type descriptor.
2534
+ RelativeDirectPointerIntPair<TargetNominalTypeDescriptor<Runtime>,
2535
+ TypeMetadataRecordKind>
2536
+ DirectNominalTypeDescriptor;
2537
+
2538
+ // / An indirect reference to a nominal type descriptor.
2539
+ RelativeDirectPointerIntPair<TargetNominalTypeDescriptor<Runtime> * const ,
2540
+ TypeMetadataRecordKind>
2541
+ IndirectNominalTypeDescriptor;
2542
+
2533
2543
// / A direct reference to the metadata, which must be uniqued before
2534
2544
// / being used.
2535
- // /
2536
- // / Only valid when the \c IndirectClassOrDirectType value is
2537
- // \c IsDirectType.
2538
2545
RelativeDirectPointerIntPair<TargetMetadata<Runtime>,
2539
- TypeMetadataRecordKind> DirectType ;
2546
+ TypeMetadataRecordKind> NonuniqueDirectType ;
2540
2547
2541
2548
// / An indirect reference to the metadata.
2542
2549
// /
2543
2550
// / Only valid when the \c IndirectClassOrDirectType value is
2544
2551
// \c IsIndirectClass.
2545
2552
RelativeDirectPointerIntPair<const TargetClassMetadata<Runtime> *,
2546
- TypeMetadataRecordKind> IndirectClass;
2547
-
2548
- // / The nominal type descriptor for a resilient or generic type which has
2549
- // / instances that conform to the protocol.
2550
- RelativeIndirectablePointerIntPair<TargetNominalTypeDescriptor<Runtime>,
2551
- /* always clear=*/ bool > TypeDescriptor;
2553
+ TypeMetadataRecordKind> IndirectObjCClass;
2552
2554
};
2553
2555
2554
2556
@@ -2575,7 +2577,7 @@ struct TargetProtocolConformanceRecord {
2575
2577
}
2576
2578
2577
2579
TypeMetadataRecordKind getTypeKind () const {
2578
- return DirectType .getInt ();
2580
+ return DirectNominalTypeDescriptor .getInt ();
2579
2581
}
2580
2582
2581
2583
ProtocolConformanceReferenceKind getConformanceKind () const {
@@ -2587,18 +2589,18 @@ struct TargetProtocolConformanceRecord {
2587
2589
case TypeMetadataRecordKind::NonuniqueDirectType:
2588
2590
break ;
2589
2591
2590
- case TypeMetadataRecordKind::UniqueIndirectClass :
2592
+ case TypeMetadataRecordKind::IndirectObjCClass :
2591
2593
case TypeMetadataRecordKind::DirectNominalTypeDescriptor:
2592
2594
case TypeMetadataRecordKind::IndirectNominalTypeDescriptor:
2593
2595
assert (false && " not direct type metadata" );
2594
2596
}
2595
2597
2596
- return DirectType .getPointer ();
2598
+ return NonuniqueDirectType .getPointer ();
2597
2599
}
2598
2600
2599
- const TargetClassMetadata<Runtime> * const *getIndirectClass () const {
2601
+ const TargetClassMetadata<Runtime> * const *getIndirectObjCClass () const {
2600
2602
switch (getTypeKind ()) {
2601
- case TypeMetadataRecordKind::UniqueIndirectClass :
2603
+ case TypeMetadataRecordKind::IndirectObjCClass :
2602
2604
break ;
2603
2605
2604
2606
case TypeMetadataRecordKind::NonuniqueDirectType:
@@ -2607,22 +2609,24 @@ struct TargetProtocolConformanceRecord {
2607
2609
assert (false && " not indirect class object" );
2608
2610
}
2609
2611
2610
- return IndirectClass .getPointer ();
2612
+ return IndirectObjCClass .getPointer ();
2611
2613
}
2612
2614
2613
2615
const TargetNominalTypeDescriptor<Runtime> *
2614
2616
getNominalTypeDescriptor () const {
2615
2617
switch (getTypeKind ()) {
2616
2618
case TypeMetadataRecordKind::DirectNominalTypeDescriptor:
2619
+ return DirectNominalTypeDescriptor.getPointer ();
2620
+
2617
2621
case TypeMetadataRecordKind::IndirectNominalTypeDescriptor:
2618
- break ;
2619
-
2620
- case TypeMetadataRecordKind::UniqueIndirectClass :
2622
+ return *IndirectNominalTypeDescriptor. getPointer () ;
2623
+
2624
+ case TypeMetadataRecordKind::IndirectObjCClass :
2621
2625
case TypeMetadataRecordKind::NonuniqueDirectType:
2622
2626
assert (false && " not generic metadata pattern" );
2623
2627
}
2624
2628
2625
- return TypeDescriptor. getPointer () ;
2629
+ return nullptr ;
2626
2630
}
2627
2631
2628
2632
// / Get the directly-referenced static witness table.
0 commit comments