File tree Expand file tree Collapse file tree 4 files changed +10
-2
lines changed Expand file tree Collapse file tree 4 files changed +10
-2
lines changed Original file line number Diff line number Diff line change @@ -4305,6 +4305,9 @@ class ProtocolDecl final : public NominalTypeDecl {
4305
4305
// / requirements listed here become entries in the witness table.
4306
4306
ArrayRef<Requirement> getRequirementSignature () const ;
4307
4307
4308
+ // / Is the requirement signature currently being computed?
4309
+ bool isComputingRequirementSignature () const ;
4310
+
4308
4311
// / Has the requirement signature been computed yet?
4309
4312
bool isRequirementSignatureComputed () const {
4310
4313
return RequirementSignature != nullptr ;
Original file line number Diff line number Diff line change @@ -1056,7 +1056,7 @@ class GenericSignatureBuilder::RequirementSource final
1056
1056
WrittenRequirementLoc writtenReqLoc)
1057
1057
: kind(kind), storageKind(StorageKind::StoredType),
1058
1058
hasTrailingWrittenRequirementLoc(!writtenReqLoc.isNull()),
1059
- usesRequirementSignature(protocol->isRequirementSignatureComputed ()),
1059
+ usesRequirementSignature(! protocol->isComputingRequirementSignature ()),
1060
1060
parent(parent) {
1061
1061
assert ((static_cast <bool >(parent) != isRootKind (kind)) &&
1062
1062
" Root RequirementSource should not have parent (or vice versa)" );
Original file line number Diff line number Diff line change @@ -4575,6 +4575,11 @@ ArrayRef<Requirement> ProtocolDecl::getRequirementSignature() const {
4575
4575
None);
4576
4576
}
4577
4577
4578
+ bool ProtocolDecl::isComputingRequirementSignature () const {
4579
+ return getASTContext ().evaluator .hasActiveRequest (
4580
+ RequirementSignatureRequest{const_cast <ProtocolDecl*>(this )});
4581
+ }
4582
+
4578
4583
void ProtocolDecl::setRequirementSignature (ArrayRef<Requirement> requirements) {
4579
4584
assert (!RequirementSignature && " requirement signature already set" );
4580
4585
if (requirements.empty ()) {
Original file line number Diff line number Diff line change @@ -4107,7 +4107,7 @@ ConstraintResult GenericSignatureBuilder::expandConformanceRequirement(
4107
4107
// Use the requirement signature to avoid rewalking the entire protocol. This
4108
4108
// cannot compute the requirement signature directly, because that may be
4109
4109
// infinitely recursive: this code is also used to construct it.
4110
- if (proto->isRequirementSignatureComputed ()) {
4110
+ if (! proto->isComputingRequirementSignature ()) {
4111
4111
auto innerSource =
4112
4112
FloatingRequirementSource::viaProtocolRequirement (source, proto,
4113
4113
/* inferred=*/ false );
You can’t perform that action at this time.
0 commit comments