Skip to content

Commit a554dfc

Browse files
committed
Revert "Demangle inverse requirements when building AST types"
This reverts commit a2ae214.
1 parent ca25edb commit a554dfc

File tree

9 files changed

+35
-213
lines changed

9 files changed

+35
-213
lines changed

include/swift/AST/ASTDemangler.h

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@ class ASTBuilder {
8383
using BuiltProtocolDecl = swift::ProtocolDecl *;
8484
using BuiltGenericSignature = swift::GenericSignature;
8585
using BuiltRequirement = swift::Requirement;
86-
using BuiltInverseRequirement = swift::InverseRequirement;
8786
using BuiltSubstitutionMap = swift::SubstitutionMap;
8887

8988
static constexpr bool needsToPrecomputeParentGenericContextShapes = false;
@@ -162,10 +161,8 @@ class ASTBuilder {
162161

163162
Type createProtocolTypeFromDecl(ProtocolDecl *protocol);
164163

165-
Type createConstrainedExistentialType(
166-
Type base,
167-
ArrayRef<BuiltRequirement> constraints,
168-
ArrayRef<BuiltInverseRequirement> inverseRequirements);
164+
Type createConstrainedExistentialType(Type base,
165+
ArrayRef<BuiltRequirement> constraints);
169166

170167
Type createSymbolicExtendedExistentialType(NodePointer shapeNode,
171168
ArrayRef<Type> genArgs);
@@ -196,11 +193,9 @@ class ASTBuilder {
196193
using BuiltSILBoxField = llvm::PointerIntPair<Type, 1>;
197194
using BuiltSubstitution = std::pair<Type, Type>;
198195
using BuiltLayoutConstraint = swift::LayoutConstraint;
199-
Type createSILBoxTypeWithLayout(
200-
ArrayRef<BuiltSILBoxField> Fields,
201-
ArrayRef<BuiltSubstitution> Substitutions,
202-
ArrayRef<BuiltRequirement> Requirements,
203-
ArrayRef<BuiltInverseRequirement> inverseRequirements);
196+
Type createSILBoxTypeWithLayout(ArrayRef<BuiltSILBoxField> Fields,
197+
ArrayRef<BuiltSubstitution> Substitutions,
198+
ArrayRef<BuiltRequirement> Requirements);
204199

205200
bool isExistential(Type type) {
206201
return type->isExistentialType();
@@ -243,9 +238,6 @@ class ASTBuilder {
243238
unsigned size,
244239
unsigned alignment);
245240

246-
InverseRequirement createInverseRequirement(
247-
Type subject, InvertibleProtocolKind kind);
248-
249241
private:
250242
bool validateParentType(TypeDecl *decl, Type parent);
251243
CanGenericSignature demangleGenericSignature(

include/swift/AST/InvertibleProtocolKind.h

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

include/swift/AST/KnownProtocols.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515

1616
#include "swift/Basic/InlineBitfield.h"
1717
#include "swift/Basic/FixedBitSet.h"
18-
#include "swift/AST/InvertibleProtocolKind.h"
1918
#include "swift/Config.h"
2019

2120
namespace llvm {
@@ -58,6 +57,11 @@ enum : uint8_t {
5857
#include "swift/AST/KnownProtocols.def"
5958
};
6059

60+
enum class InvertibleProtocolKind : uint8_t {
61+
#define INVERTIBLE_PROTOCOL_WITH_NAME(Id, Name) Id,
62+
#include "swift/AST/KnownProtocols.def"
63+
};
64+
6165
using InvertibleProtocolSet = FixedBitSet<NumInvertibleProtocols,
6266
InvertibleProtocolKind>;
6367

include/swift/Demangling/TypeDecoder.h

Lines changed: 14 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
#include "swift/Basic/LLVM.h"
2323

2424
#include "swift/ABI/MetadataValues.h"
25-
#include "swift/AST/InvertibleProtocolKind.h"
2625
#include "swift/AST/LayoutConstraintKind.h"
2726
#include "swift/AST/RequirementKind.h"
2827
#include "swift/Basic/OptionSet.h"
@@ -423,13 +422,10 @@ getObjCClassOrProtocolName(NodePointer node) {
423422
#endif
424423

425424
template <typename BuiltType, typename BuiltRequirement,
426-
typename BuiltInverseRequirement,
427425
typename BuiltLayoutConstraint, typename BuilderType>
428-
void decodeRequirement(
429-
NodePointer node,
430-
llvm::SmallVectorImpl<BuiltRequirement> &requirements,
431-
llvm::SmallVectorImpl<BuiltInverseRequirement> &inverseRequirements,
432-
BuilderType &Builder) {
426+
void decodeRequirement(NodePointer node,
427+
llvm::SmallVectorImpl<BuiltRequirement> &requirements,
428+
BuilderType &Builder) {
433429
for (auto &child : *node) {
434430
if (child->getKind() == Demangle::Node::Kind::DependentGenericParamCount ||
435431
child->getKind() == Demangle::Node::Kind::DependentGenericParamPackMarker)
@@ -455,40 +451,9 @@ void decodeRequirement(
455451
return;
456452
} else if (child->getKind() ==
457453
Demangle::Node::Kind::DependentGenericInverseConformanceRequirement) {
458-
// Type child
459-
auto constraintNode = child->getChild(1);
460-
if (constraintNode->getKind() != Demangle::Node::Kind::Type ||
461-
constraintNode->getNumChildren() != 1)
462-
return;
463-
464-
// Protocol child
465-
auto protocolNode = constraintNode->getChild(0);
466-
if (protocolNode->getKind() != Demangle::Node::Kind::Protocol ||
467-
protocolNode->getNumChildren() != 2)
468-
return;
469-
470-
auto moduleNode = protocolNode->getChild(0);
471-
if (moduleNode->getKind() != Demangle::Node::Kind::Module ||
472-
moduleNode->getText() != "Swift")
473-
return;
474-
475-
auto protocolNameNode = protocolNode->getChild(1);
476-
if (protocolNameNode->getKind() != Demangle::Node::Kind::Identifier)
477-
return;
478-
479-
auto protocolName = protocolNameNode->getText();
480-
using OptInvertibleKind = std::optional<InvertibleProtocolKind>;
481-
auto protocolKind = llvm::StringSwitch<OptInvertibleKind>(protocolName)
482-
#define INVERTIBLE_PROTOCOL_WITH_NAME(Id, Name) \
483-
.Case(Name, InvertibleProtocolKind::Id)
484-
#include "swift/AST/KnownProtocols.def"
485-
.Default(std::nullopt);
486-
if (!protocolKind)
487-
return;
488-
489-
inverseRequirements.push_back(
490-
Builder.createInverseRequirement(subjectType, *protocolKind));
491-
continue;
454+
// FIXME(kavon): this is unimplemented! We should build a PCT here with
455+
// the inverse in it.
456+
return;
492457
}
493458

494459

@@ -573,7 +538,6 @@ class TypeDecoder {
573538
using Field = typename BuilderType::BuiltSILBoxField;
574539
using BuiltSubstitution = typename BuilderType::BuiltSubstitution;
575540
using BuiltRequirement = typename BuilderType::BuiltRequirement;
576-
using BuiltInverseRequirement = typename BuilderType::BuiltInverseRequirement;
577541
using BuiltLayoutConstraint = typename BuilderType::BuiltLayoutConstraint;
578542
using BuiltGenericSignature = typename BuilderType::BuiltGenericSignature;
579543
using BuiltSubstitutionMap = typename BuilderType::BuiltSubstitutionMap;
@@ -836,19 +800,16 @@ class TypeDecoder {
836800
return protocolType;
837801

838802
llvm::SmallVector<BuiltRequirement, 8> requirements;
839-
llvm::SmallVector<BuiltInverseRequirement, 8> inverseRequirements;
840803

841804
auto *reqts = Node->getChild(1);
842805
if (reqts->getKind() != NodeKind::ConstrainedExistentialRequirementList)
843806
return MAKE_NODE_TYPE_ERROR0(reqts, "is not requirement list");
844807

845-
decodeRequirement<BuiltType, BuiltRequirement, BuiltInverseRequirement,
846-
BuiltLayoutConstraint, BuilderType>(
847-
reqts, requirements, inverseRequirements, Builder);
808+
decodeRequirement<BuiltType, BuiltRequirement, BuiltLayoutConstraint,
809+
BuilderType>(reqts, requirements, Builder);
848810

849811
return Builder.createConstrainedExistentialType(protocolType.getType(),
850-
requirements,
851-
inverseRequirements);
812+
requirements);
852813
}
853814
case NodeKind::ConstrainedExistentialSelf:
854815
return Builder.createGenericTypeParameterType(/*depth*/ 0, /*index*/ 0);
@@ -1319,7 +1280,6 @@ class TypeDecoder {
13191280
llvm::SmallVector<Field, 4> fields;
13201281
llvm::SmallVector<BuiltSubstitution, 4> substitutions;
13211282
llvm::SmallVector<BuiltRequirement, 4> requirements;
1322-
llvm::SmallVector<BuiltInverseRequirement, 8> inverseRequirements;
13231283
llvm::SmallVector<BuiltType, 4> genericParams;
13241284

13251285
if (Node->getNumChildren() < 1)
@@ -1372,10 +1332,10 @@ class TypeDecoder {
13721332
}
13731333

13741334
// Decode requirements.
1375-
decodeRequirement<BuiltType, BuiltRequirement, BuiltInverseRequirement,
1376-
BuiltLayoutConstraint, BuilderType>(
1377-
dependentGenericSignatureNode, requirements, inverseRequirements,
1378-
Builder);
1335+
decodeRequirement<BuiltType, BuiltRequirement, BuiltLayoutConstraint,
1336+
BuilderType>(dependentGenericSignatureNode,
1337+
requirements,
1338+
Builder);
13791339

13801340
// Decode substitutions.
13811341
for (unsigned i = 0, e = substNode->getNumChildren(); i < e; ++i) {
@@ -1413,8 +1373,7 @@ class TypeDecoder {
14131373
}
14141374

14151375
return Builder.createSILBoxTypeWithLayout(fields, substitutions,
1416-
requirements,
1417-
inverseRequirements);
1376+
requirements);
14181377
}
14191378
case NodeKind::SugaredOptional: {
14201379
if (Node->getNumChildren() < 1)

include/swift/RemoteInspection/TypeRef.h

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -192,25 +192,6 @@ class TypeRefRequirement {
192192
}
193193
};
194194

195-
class TypeRefInverseRequirement {
196-
llvm::PointerIntPair<const TypeRef *, 3, InvertibleProtocolKind> Storage;
197-
198-
public:
199-
TypeRefInverseRequirement(const TypeRef *first, InvertibleProtocolKind proto)
200-
: Storage(first, proto) {
201-
assert(first);
202-
}
203-
204-
/// Retrieve the first type.
205-
const TypeRef *getFirstType() const {
206-
return Storage.getPointer();
207-
}
208-
209-
/// Determine the kind of requirement.
210-
InvertibleProtocolKind getKind() const { return Storage.getInt(); }
211-
};
212-
213-
214195
// On 32-bit systems this needs more than just pointer alignment to fit the
215196
// extra bits needed by TypeRefRequirement.
216197
class alignas(8) TypeRef {

include/swift/RemoteInspection/TypeRefBuilder.h

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,6 @@ class TypeRefBuilder {
389389
std::optional<std::pair<std::string, bool /*isObjC*/>>;
390390
using BuiltSubstitution = std::pair<const TypeRef *, const TypeRef *>;
391391
using BuiltRequirement = TypeRefRequirement;
392-
using BuiltInverseRequirement = TypeRefInverseRequirement;
393392
using BuiltLayoutConstraint = TypeRefLayoutConstraint;
394393
using BuiltGenericTypeParam = const GenericTypeParameterTypeRef *;
395394
using BuiltGenericSignature = const GenericSignatureRef *;
@@ -1222,9 +1221,7 @@ class TypeRefBuilder {
12221221
}
12231222

12241223
const ConstrainedExistentialTypeRef *createConstrainedExistentialType(
1225-
const TypeRef *base, llvm::ArrayRef<BuiltRequirement> constraints,
1226-
llvm::ArrayRef<BuiltInverseRequirement> InverseRequirements) {
1227-
// FIXME: Handle inverse requirements.
1224+
const TypeRef *base, llvm::ArrayRef<BuiltRequirement> constraints) {
12281225
auto *baseProto = llvm::dyn_cast<ProtocolCompositionTypeRef>(base);
12291226
if (!baseProto)
12301227
return nullptr;
@@ -1298,17 +1295,10 @@ class TypeRefBuilder {
12981295
return {};
12991296
}
13001297

1301-
BuiltInverseRequirement createInverseRequirement(
1302-
const TypeRef *subject, InvertibleProtocolKind proto) {
1303-
return TypeRefInverseRequirement(subject, proto);
1304-
}
1305-
13061298
const SILBoxTypeWithLayoutTypeRef *createSILBoxTypeWithLayout(
13071299
const llvm::SmallVectorImpl<BuiltSILBoxField> &Fields,
13081300
const llvm::SmallVectorImpl<BuiltSubstitution> &Substitutions,
1309-
const llvm::SmallVectorImpl<BuiltRequirement> &Requirements,
1310-
llvm::ArrayRef<BuiltInverseRequirement> InverseRequirements) {
1311-
// FIXME: Handle inverse requirements.
1301+
const llvm::SmallVectorImpl<BuiltRequirement> &Requirements) {
13121302
return SILBoxTypeWithLayoutTypeRef::create(*this, Fields, Substitutions,
13131303
Requirements);
13141304
}

0 commit comments

Comments
 (0)