Skip to content

Commit 79b78ac

Browse files
committed
Use SuppressibleProtocolSet as InvertibleProtocolSet
Collapse the representations of "suppressible" and "invertible" protocol sets. Only minor adjustments were required.
1 parent 8b22079 commit 79b78ac

File tree

13 files changed

+35
-53
lines changed

13 files changed

+35
-53
lines changed

include/swift/ABI/SuppressibleProtocols.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#define SWIFT_ABI_SUPPRESSIBLEPROTOCOLS_H
2020

2121
#include <cstdint>
22+
#include <initializer_list>
2223
#include <iterator>
2324

2425
namespace swift {
@@ -30,6 +31,8 @@ enum class SuppressibleProtocolKind : uint8_t {
3031
#include "swift/ABI/SuppressibleProtocols.def"
3132
};
3233

34+
typedef SuppressibleProtocolKind InvertibleProtocolKind;
35+
3336
/// A set of suppressible protocols, whose bits correspond to the cases of
3437
/// SuppressibleProtocolKind.
3538
class SuppressibleProtocolSet {
@@ -47,6 +50,13 @@ class SuppressibleProtocolSet {
4750
explicit constexpr SuppressibleProtocolSet(StorageType bits) : bits(bits) {}
4851
constexpr SuppressibleProtocolSet() : bits(0) {}
4952

53+
SuppressibleProtocolSet(
54+
std::initializer_list<SuppressibleProtocolKind> elements
55+
) : bits(0) {
56+
for (auto element : elements)
57+
insert(element);
58+
}
59+
5060
/// Retrieve the raw bits that describe this set.
5161
StorageType rawBits() const { return bits; }
5262

@@ -63,6 +73,12 @@ class SuppressibleProtocolSet {
6373
bits = bits | getMask(kind);
6474
}
6575

76+
/// Insert all of the suppressible protocols from the other set into this
77+
/// one.
78+
void insertAll(SuppressibleProtocolSet other) {
79+
bits |= other.bits;
80+
}
81+
6682
/// Remove the given suppressible protocol from the set.
6783
void remove(SuppressibleProtocolKind kind) {
6884
uint16_t mask = getMask(kind);

include/swift/AST/InvertibleProtocolKind.h

Lines changed: 0 additions & 30 deletions
This file was deleted.

include/swift/AST/KnownProtocols.h

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,6 @@
1414
#define SWIFT_AST_KNOWNPROTOCOLS_H
1515

1616
#include "swift/ABI/SuppressibleProtocols.h"
17-
#include "swift/Basic/InlineBitfield.h"
18-
#include "swift/Basic/FixedBitSet.h"
19-
#include "swift/AST/InvertibleProtocolKind.h"
2017
#include "swift/Config.h"
2118

2219
namespace llvm {
@@ -53,14 +50,13 @@ llvm::StringRef getProtocolName(KnownProtocolKind kind);
5350

5451
enum : uint8_t {
5552
// Use preprocessor trick to count all the invertible protocols.
56-
#define INVERTIBLE_PROTOCOL_WITH_NAME(Id, Name) +1
53+
#define SUPPRESSIBLE_PROTOCOL(Name, Bit) +1
5754
/// The number of invertible protocols.
5855
NumInvertibleProtocols =
59-
#include "swift/AST/KnownProtocols.def"
56+
#include "swift/ABI/SuppressibleProtocols.def"
6057
};
6158

62-
using InvertibleProtocolSet = FixedBitSet<NumInvertibleProtocols,
63-
InvertibleProtocolKind>;
59+
using InvertibleProtocolSet = SuppressibleProtocolSet;
6460

6561
/// Maps a KnownProtocol to the set of InvertibleProtocols, if a mapping exists.
6662
/// \returns None if the known protocol is not invertible.

include/swift/Demangling/TypeDecoder.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
#include "swift/Basic/LLVM.h"
2323

2424
#include "swift/ABI/MetadataValues.h"
25-
#include "swift/AST/InvertibleProtocolKind.h"
25+
#include "swift/ABI/SuppressibleProtocols.h"
2626
#include "swift/AST/LayoutConstraintKind.h"
2727
#include "swift/AST/RequirementKind.h"
2828
#include "swift/Basic/OptionSet.h"

lib/AST/ASTPrinter.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7774,15 +7774,15 @@ static void getSyntacticInheritanceClause(const ProtocolDecl *proto,
77747774
/*isPreconcurrency=*/false);
77757775
}
77767776

7777-
InvertibleProtocolSet inverses = InvertibleProtocolSet::full();
7777+
InvertibleProtocolSet inverses = InvertibleProtocolSet::allKnown();
77787778

77797779
for (auto *inherited : proto->getInheritedProtocols()) {
77807780
if (auto ip = inherited->getInvertibleProtocolKind()) {
77817781
inverses.remove(*ip);
77827782
continue;
77837783
}
77847784

7785-
for (auto ip : InvertibleProtocolSet::full()) {
7785+
for (auto ip : InvertibleProtocolSet::allKnown()) {
77867786
auto *proto = ctx.getProtocol(getKnownProtocolKind(ip));
77877787
if (inherited->inheritsFrom(proto))
77887788
inverses.remove(ip);

lib/AST/Decl.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1326,7 +1326,7 @@ static GenericSignature getPlaceholderGenericSignature(
13261326
auto type = genericParam->getDeclaredInterfaceType();
13271327
genericParams.push_back(type->castTo<GenericTypeParamType>());
13281328

1329-
for (auto ip : InvertibleProtocolSet::full()) {
1329+
for (auto ip : InvertibleProtocolSet::allKnown()) {
13301330
auto proto = ctx.getProtocol(getKnownProtocolKind(ip));
13311331
requirements.emplace_back(RequirementKind::Conformance, type,
13321332
proto->getDeclaredInterfaceType());

lib/AST/GenericSignature.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -661,7 +661,7 @@ Type GenericSignatureImpl::getUpperBound(Type type,
661661
InvertibleProtocolSet inverses;
662662

663663
if (!superclass && !hasExplicitAnyObject) {
664-
for (auto ip : InvertibleProtocolSet::full()) {
664+
for (auto ip : InvertibleProtocolSet::allKnown()) {
665665
auto *kp = ctx.getProtocol(::getKnownProtocolKind(ip));
666666
if (!requiresProtocol(type, kp))
667667
inverses.insert(ip);
@@ -1257,7 +1257,7 @@ void GenericSignatureImpl::getRequirementsWithInverses(
12571257
if (getSuperclassBound(gp) || getConcreteType(gp))
12581258
continue;
12591259

1260-
for (auto ip : InvertibleProtocolSet::full()) {
1260+
for (auto ip : InvertibleProtocolSet::allKnown()) {
12611261
auto *proto = ctx.getProtocol(getKnownProtocolKind(ip));
12621262

12631263
// If we can derive a conformance to this protocol, then don't add an
@@ -1297,7 +1297,7 @@ RequirementSignature RequirementSignature::getPlaceholderRequirementSignature(
12971297
inheritedProtos.push_back(inheritedProto);
12981298
}
12991299

1300-
for (auto ip : InvertibleProtocolSet::full()) {
1300+
for (auto ip : InvertibleProtocolSet::allKnown()) {
13011301
auto *otherProto = ctx.getProtocol(getKnownProtocolKind(ip));
13021302
inheritedProtos.push_back(otherProto);
13031303
}
@@ -1313,7 +1313,7 @@ RequirementSignature RequirementSignature::getPlaceholderRequirementSignature(
13131313
}
13141314

13151315
for (auto *assocTypeDecl : proto->getAssociatedTypeMembers()) {
1316-
for (auto ip : InvertibleProtocolSet::full()) {
1316+
for (auto ip : InvertibleProtocolSet::allKnown()) {
13171317
auto *otherProto = ctx.getProtocol(getKnownProtocolKind(ip));
13181318
requirements.emplace_back(RequirementKind::Conformance,
13191319
assocTypeDecl->getDeclaredInterfaceType(),
@@ -1349,7 +1349,7 @@ void RequirementSignature::getRequirementsWithInverses(
13491349
sig->getConcreteType(interfaceType))
13501350
return;
13511351

1352-
for (auto ip : InvertibleProtocolSet::full()) {
1352+
for (auto ip : InvertibleProtocolSet::allKnown()) {
13531353
auto *proto = ctx.getProtocol(getKnownProtocolKind(ip));
13541354

13551355
// If we can derive a conformance to this protocol, then don't add an

lib/AST/NameLookup.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3304,7 +3304,7 @@ InheritedProtocolsRequest::evaluate(Evaluator &evaluator,
33043304
}
33053305

33063306
if (!skipInverses) {
3307-
for (auto ip : InvertibleProtocolSet::full()) {
3307+
for (auto ip : InvertibleProtocolSet::allKnown()) {
33083308
// Unless the user wrote ~P in the syntactic inheritance clause, the
33093309
// semantic inherited list includes P.
33103310
if (!inverses.contains(ip))

lib/AST/ProtocolConformance.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1087,7 +1087,7 @@ void NominalTypeDecl::prepareConformanceTable() const {
10871087
inverses.insert(InvertibleProtocolKind::Escapable);
10881088

10891089
bool hasSuppressedConformances = false;
1090-
for (auto ip : InvertibleProtocolSet::full()) {
1090+
for (auto ip : InvertibleProtocolSet::allKnown()) {
10911091
if (!inverses.contains(ip) ||
10921092
(isa<ClassDecl>(this) &&
10931093
!ctx.LangOpts.hasFeature(Feature::MoveOnlyClasses))) {
@@ -1281,7 +1281,7 @@ static SmallVector<ProtocolConformance *, 2> findSynthesizedConformances(
12811281

12821282
// Triggers synthesis of a possibly conditional conformance.
12831283
// For the unconditional ones, see NominalTypeDecl::prepareConformanceTable
1284-
for (auto ip : InvertibleProtocolSet::full())
1284+
for (auto ip : InvertibleProtocolSet::allKnown())
12851285
trySynthesize(getKnownProtocolKind(ip));
12861286

12871287
if (nominal->getASTContext().LangOpts.hasFeature(

lib/AST/Requirement.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,7 @@ void InverseRequirement::expandDefaults(
350350
ArrayRef<Type> gps,
351351
SmallVectorImpl<StructuralRequirement> &result) {
352352
for (auto gp : gps) {
353-
for (auto ip : InvertibleProtocolSet::full()) {
353+
for (auto ip : InvertibleProtocolSet::allKnown()) {
354354
auto proto = ctx.getProtocol(getKnownProtocolKind(ip));
355355
result.push_back({{RequirementKind::Conformance, gp,
356356
proto->getDeclaredInterfaceType()},

lib/AST/RequirementMachine/RequirementMachineRequests.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -755,7 +755,7 @@ static GenericSignature getPlaceholderGenericSignature(
755755
ASTContext &ctx, ArrayRef<GenericTypeParamType *> genericParams) {
756756
SmallVector<Requirement, 2> requirements;
757757
for (auto param : genericParams) {
758-
for (auto ip : InvertibleProtocolSet::full()) {
758+
for (auto ip : InvertibleProtocolSet::allKnown()) {
759759
auto proto = ctx.getProtocol(getKnownProtocolKind(ip));
760760
requirements.emplace_back(RequirementKind::Conformance, param,
761761
proto->getDeclaredInterfaceType());

lib/AST/Type.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ bool TypeBase::allowsOwnership(const GenericSignatureImpl *sig) {
281281
static void expandDefaults(SmallVectorImpl<ProtocolDecl *> &protocols,
282282
InvertibleProtocolSet inverses,
283283
ASTContext &ctx) {
284-
for (auto ip : InvertibleProtocolSet::full()) {
284+
for (auto ip : InvertibleProtocolSet::allKnown()) {
285285
if (!inverses.contains(ip)) {
286286
auto *proto = ctx.getProtocol(getKnownProtocolKind(ip));
287287
protocols.push_back(proto);

lib/IRGen/IRGenMangler.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ mangleProtocolForLLVMTypeName(ProtocolCompositionType *type) {
273273
// don't start with a digit and don't need to be quoted.
274274
Buffer << 'T';
275275
bool isFirstItem = true;
276-
InvertibleProtocolSet inverses = InvertibleProtocolSet::full();
276+
InvertibleProtocolSet inverses = InvertibleProtocolSet::allKnown();
277277
auto protocols = layout.getProtocols();
278278
for (auto *proto : protocols) {
279279
if (auto ip = proto->getInvertibleProtocolKind()) {

0 commit comments

Comments
 (0)