21
21
#include " swift/ABI/TargetLayout.h"
22
22
#include " swift/ABI/MetadataValues.h"
23
23
#include " swift/ABI/MetadataRef.h"
24
- #include " swift/ABI/SuppressibleProtocols .h"
24
+ #include " swift/ABI/InvertibleProtocols .h"
25
25
#include " swift/ABI/TrailingObjects.h"
26
26
#include " swift/Demangling/Demangle.h"
27
27
@@ -105,8 +105,8 @@ struct TargetGenericContextDescriptorHeader {
105
105
return getNumArguments () > 0 ;
106
106
}
107
107
108
- bool hasConditionalSuppressedProtocols () const {
109
- return Flags.hasConditionalSuppressedProtocols ();
108
+ bool hasConditionalInvertedProtocols () const {
109
+ return Flags.hasConditionalInvertedProtocols ();
110
110
}
111
111
};
112
112
using GenericContextDescriptorHeader =
@@ -143,19 +143,19 @@ class TargetGenericRequirementDescriptor {
143
143
// / Only valid if the requirement has Layout kind.
144
144
GenericRequirementLayoutKind Layout;
145
145
146
- // / The set of suppressible protocols whose check is suppressed , along
147
- // / with the index of the generic parameter being suppressed .
146
+ // / The set of invertible protocols whose check is disabled , along
147
+ // / with the index of the generic parameter to which this applies .
148
148
// /
149
149
// / The index is technically redundant with the subject type, but its
150
150
// / storage is effectively free because this union is 32 bits anyway. The
151
- // / index 0xFFFF is reserved for "not a generic parameter", in case we
152
- // / need to use that in the future .
151
+ // / index 0xFFFF is reserved for "not a generic parameter", in which case
152
+ // / the constraints are on the subject type .
153
153
// /
154
- // / Only valid if the requirement has SuppressedProtocols kind.
154
+ // / Only valid if the requirement has InvertedProtocols kind.
155
155
struct {
156
156
uint16_t GenericParamIndex;
157
- SuppressibleProtocolSet Protocols;
158
- } SuppressedProtocols ;
157
+ InvertibleProtocolSet Protocols;
158
+ } InvertedProtocols ;
159
159
};
160
160
161
161
constexpr GenericRequirementFlags getFlags () const {
@@ -223,16 +223,16 @@ class TargetGenericRequirementDescriptor {
223
223
return Layout;
224
224
}
225
225
226
- // / Retrieve the set of suppressed protocols.
227
- SuppressibleProtocolSet getSuppressedProtocols () const {
228
- assert (getKind () == GenericRequirementKind::SuppressedProtocols );
229
- return SuppressedProtocols .Protocols ;
226
+ // / Retrieve the set of inverted protocols.
227
+ InvertibleProtocolSet getInvertedProtocols () const {
228
+ assert (getKind () == GenericRequirementKind::InvertedProtocols );
229
+ return InvertedProtocols .Protocols ;
230
230
}
231
231
232
- // / Retrieve the suppressible protocol kind.
233
- uint16_t getSuppressedProtocolsGenericParamIndex () const {
234
- assert (getKind () == GenericRequirementKind::SuppressedProtocols );
235
- return SuppressedProtocols .GenericParamIndex ;
232
+ // / Retrieve the invertible protocol kind.
233
+ uint16_t getInvertedProtocolsGenericParamIndex () const {
234
+ assert (getKind () == GenericRequirementKind::InvertedProtocols );
235
+ return InvertedProtocols .GenericParamIndex ;
236
236
}
237
237
238
238
// / Determine whether this generic requirement has a known kind.
@@ -246,7 +246,7 @@ class TargetGenericRequirementDescriptor {
246
246
case GenericRequirementKind::SameConformance:
247
247
case GenericRequirementKind::SameType:
248
248
case GenericRequirementKind::SameShape:
249
- case GenericRequirementKind::SuppressedProtocols :
249
+ case GenericRequirementKind::InvertedProtocols :
250
250
return true ;
251
251
}
252
252
@@ -299,24 +299,24 @@ struct GenericPackShapeDescriptor {
299
299
};
300
300
301
301
// / A count for the number of requirements for the number of requirements
302
- // / for a given conditional conformance to a suppressible protocols.
303
- struct ConditionalSuppressibleProtocolsRequirementCount {
302
+ // / for a given conditional conformance to a invertible protocols.
303
+ struct ConditionalInvertibleProtocolsRequirementCount {
304
304
uint16_t count;
305
305
};
306
306
307
- // / A suppressible protocol set used for the conditional conformances in a
307
+ // / A invertible protocol set used for the conditional conformances in a
308
308
// / generic context.
309
- struct ConditionalSuppressibleProtocolSet : SuppressibleProtocolSet {
310
- using SuppressibleProtocolSet::SuppressibleProtocolSet ;
309
+ struct ConditionalInvertibleProtocolSet : InvertibleProtocolSet {
310
+ using InvertibleProtocolSet::InvertibleProtocolSet ;
311
311
};
312
312
313
313
// / A generic requirement for describing a conditional conformance to a
314
- // / suppressible protocol.
314
+ // / invertible protocol.
315
315
// /
316
316
// / This type is equivalent to a `TargetGenericRequirementDescriptor`, and
317
317
// / differs only because it needs to occur alongside
318
318
template <typename Runtime>
319
- struct TargetConditionalSuppressibleProtocolRequirement : TargetGenericRequirementDescriptor<Runtime> { };
319
+ struct TargetConditionalInvertibleProtocolRequirement : TargetGenericRequirementDescriptor<Runtime> { };
320
320
321
321
// / An array of generic parameter descriptors, all
322
322
// / GenericParamDescriptor::implicit(), which is by far
@@ -478,27 +478,27 @@ class TrailingGenericContextObjects<TargetSelf<Runtime>,
478
478
TargetGenericRequirementDescriptor<Runtime>,
479
479
GenericPackShapeHeader,
480
480
GenericPackShapeDescriptor,
481
- ConditionalSuppressibleProtocolSet ,
482
- ConditionalSuppressibleProtocolsRequirementCount ,
483
- TargetConditionalSuppressibleProtocolRequirement <Runtime>,
481
+ ConditionalInvertibleProtocolSet ,
482
+ ConditionalInvertibleProtocolsRequirementCount ,
483
+ TargetConditionalInvertibleProtocolRequirement <Runtime>,
484
484
FollowingTrailingObjects...>
485
485
{
486
486
protected:
487
487
using Self = TargetSelf<Runtime>;
488
488
using GenericContextHeaderType = TargetGenericContextHeaderType<Runtime>;
489
489
using GenericRequirementDescriptor =
490
490
TargetGenericRequirementDescriptor<Runtime>;
491
- using GenericConditionalSuppressibleProtocolRequirement =
492
- TargetConditionalSuppressibleProtocolRequirement <Runtime>;
491
+ using GenericConditionalInvertibleProtocolRequirement =
492
+ TargetConditionalInvertibleProtocolRequirement <Runtime>;
493
493
using TrailingObjects = swift::ABI::TrailingObjects<Self,
494
494
GenericContextHeaderType,
495
495
GenericParamDescriptor,
496
496
GenericRequirementDescriptor,
497
497
GenericPackShapeHeader,
498
498
GenericPackShapeDescriptor,
499
- ConditionalSuppressibleProtocolSet ,
500
- ConditionalSuppressibleProtocolsRequirementCount ,
501
- GenericConditionalSuppressibleProtocolRequirement ,
499
+ ConditionalInvertibleProtocolSet ,
500
+ ConditionalInvertibleProtocolsRequirementCount ,
501
+ GenericConditionalInvertibleProtocolRequirement ,
502
502
FollowingTrailingObjects...>;
503
503
friend TrailingObjects;
504
504
@@ -528,81 +528,81 @@ class TrailingGenericContextObjects<TargetSelf<Runtime>,
528
528
return getFullGenericContextHeader ();
529
529
}
530
530
531
- bool hasConditionalSuppressedProtocols () const {
531
+ bool hasConditionalInvertedProtocols () const {
532
532
if (!asSelf ()->isGeneric ())
533
533
return false ;
534
534
535
- return getGenericContextHeader ().hasConditionalSuppressedProtocols ();
535
+ return getGenericContextHeader ().hasConditionalInvertedProtocols ();
536
536
}
537
537
538
- const SuppressibleProtocolSet &
539
- getConditionalSuppressedProtocols () const {
540
- assert (hasConditionalSuppressedProtocols ());
538
+ const InvertibleProtocolSet &
539
+ getConditionalInvertedProtocols () const {
540
+ assert (hasConditionalInvertedProtocols ());
541
541
return *this ->template
542
- getTrailingObjects<ConditionalSuppressibleProtocolSet >();
542
+ getTrailingObjects<ConditionalInvertibleProtocolSet >();
543
543
}
544
544
545
- // / Retrieve the counts for # of conditional suppressible protocols for each
546
- // / conditional conformance to a suppressible protocol.
545
+ // / Retrieve the counts for # of conditional invertible protocols for each
546
+ // / conditional conformance to a invertible protocol.
547
547
// /
548
548
// / The counts are cumulative, so the first entry in the array is the
549
549
// / number of requirements for the first conditional conformance. The
550
550
// / second entry in the array is the number of requirements in the first
551
551
// / and second conditional conformances. The last entry is, therefore, the
552
552
// / total count of requirements in the structure.
553
- llvm::ArrayRef<ConditionalSuppressibleProtocolsRequirementCount >
554
- getConditionalSuppressibleProtocolRequirementCounts () const {
555
- if (!asSelf ()->hasConditionalSuppressedProtocols ())
553
+ llvm::ArrayRef<ConditionalInvertibleProtocolsRequirementCount >
554
+ getConditionalInvertibleProtocolRequirementCounts () const {
555
+ if (!asSelf ()->hasConditionalInvertedProtocols ())
556
556
return {};
557
557
558
558
return {
559
559
this ->template
560
- getTrailingObjects<ConditionalSuppressibleProtocolsRequirementCount >(),
561
- getNumConditionalSuppressibleProtocolsRequirementCounts ()
560
+ getTrailingObjects<ConditionalInvertibleProtocolsRequirementCount >(),
561
+ getNumConditionalInvertibleProtocolsRequirementCounts ()
562
562
};
563
563
}
564
564
565
565
// / Retrieve the array of requirements for conditional conformances to
566
- // / the ith conditional conformance to a suppressible protocol.
567
- llvm::ArrayRef<GenericConditionalSuppressibleProtocolRequirement >
568
- getConditionalSuppressibleProtocolRequirementsAt (unsigned i) const {
569
- auto counts = getConditionalSuppressibleProtocolRequirementCounts ();
566
+ // / the ith conditional conformance to a invertible protocol.
567
+ llvm::ArrayRef<GenericConditionalInvertibleProtocolRequirement >
568
+ getConditionalInvertibleProtocolRequirementsAt (unsigned i) const {
569
+ auto counts = getConditionalInvertibleProtocolRequirementCounts ();
570
570
assert (i < counts.size ());
571
571
572
572
unsigned startIndex = (i == 0 ) ? 0 : counts[i-1 ].count ;
573
573
unsigned endIndex = counts[i].count ;
574
574
575
575
auto basePtr =
576
576
this ->template
577
- getTrailingObjects<GenericConditionalSuppressibleProtocolRequirement >();
577
+ getTrailingObjects<GenericConditionalInvertibleProtocolRequirement >();
578
578
return { basePtr + startIndex, basePtr + endIndex };
579
579
}
580
580
581
581
// / Retrieve the array of requirements for conditional conformances to
582
- // / the ith conditional conformance to a suppressible protocol.
583
- llvm::ArrayRef<GenericConditionalSuppressibleProtocolRequirement >
584
- getConditionalSuppressibleProtocolRequirementsFor (
585
- SuppressibleProtocolKind kind
582
+ // / the ith conditional conformance to a invertible protocol.
583
+ llvm::ArrayRef<GenericConditionalInvertibleProtocolRequirement >
584
+ getConditionalInvertibleProtocolRequirementsFor (
585
+ InvertibleProtocolKind kind
586
586
) const {
587
- if (!asSelf ()->hasConditionalSuppressedProtocols ())
587
+ if (!asSelf ()->hasConditionalInvertedProtocols ())
588
588
return { };
589
589
590
- auto conditionallySuppressed = getConditionalSuppressedProtocols ();
591
- if (!conditionallySuppressed .contains (kind))
590
+ auto conditionallyInverted = getConditionalInvertedProtocols ();
591
+ if (!conditionallyInverted .contains (kind))
592
592
return { };
593
593
594
594
// Count the number of "set" bits up to (but not including) the
595
595
// bit we're looking at.
596
596
unsigned targetBit = static_cast <uint8_t >(kind);
597
- auto suppressedBits = conditionallySuppressed .rawBits ();
597
+ auto invertedBits = conditionallyInverted .rawBits ();
598
598
unsigned priorBits = 0 ;
599
599
for (unsigned i = 0 ; i != targetBit; ++i) {
600
- if (suppressedBits & 0x01 )
600
+ if (invertedBits & 0x01 )
601
601
++priorBits;
602
- suppressedBits = suppressedBits >> 1 ;
602
+ invertedBits = invertedBits >> 1 ;
603
603
}
604
604
605
- return getConditionalSuppressibleProtocolRequirementsAt (priorBits);
605
+ return getConditionalInvertibleProtocolRequirementsAt (priorBits);
606
606
}
607
607
608
608
const TargetGenericContext<Runtime> *getGenericContext () const {
@@ -687,28 +687,28 @@ class TrailingGenericContextObjects<TargetSelf<Runtime>,
687
687
}
688
688
689
689
size_t numTrailingObjects (
690
- OverloadToken<ConditionalSuppressibleProtocolSet >
690
+ OverloadToken<ConditionalInvertibleProtocolSet >
691
691
) const {
692
- return asSelf ()->hasConditionalSuppressedProtocols () ? 1 : 0 ;
692
+ return asSelf ()->hasConditionalInvertedProtocols () ? 1 : 0 ;
693
693
}
694
694
695
- unsigned getNumConditionalSuppressibleProtocolsRequirementCounts () const {
696
- if (!asSelf ()->hasConditionalSuppressedProtocols ())
695
+ unsigned getNumConditionalInvertibleProtocolsRequirementCounts () const {
696
+ if (!asSelf ()->hasConditionalInvertedProtocols ())
697
697
return 0 ;
698
698
699
- return countBitsUsed (getConditionalSuppressedProtocols ().rawBits ());
699
+ return countBitsUsed (getConditionalInvertedProtocols ().rawBits ());
700
700
}
701
701
702
702
size_t numTrailingObjects (
703
- OverloadToken<ConditionalSuppressibleProtocolsRequirementCount >
703
+ OverloadToken<ConditionalInvertibleProtocolsRequirementCount >
704
704
) const {
705
- return getNumConditionalSuppressibleProtocolsRequirementCounts ();
705
+ return getNumConditionalInvertibleProtocolsRequirementCounts ();
706
706
}
707
707
708
708
size_t numTrailingObjects (
709
- OverloadToken<GenericConditionalSuppressibleProtocolRequirement >
709
+ OverloadToken<GenericConditionalInvertibleProtocolRequirement >
710
710
) const {
711
- auto counts = getConditionalSuppressibleProtocolRequirementCounts ();
711
+ auto counts = getConditionalInvertibleProtocolRequirementCounts ();
712
712
return counts.empty () ? 0 : counts.back ().count ;
713
713
}
714
714
0 commit comments