Skip to content

Commit 40a252e

Browse files
committed
---
yaml --- r: 286715 b: refs/heads/master-next c: cfae7bb h: refs/heads/master i: 286713: f321327 286711: 0cc8769
1 parent 6f52a8f commit 40a252e

File tree

5 files changed

+11
-3
lines changed

5 files changed

+11
-3
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
refs/heads/master: a67ffadd758dfc7a0f10a8afde063b8864663208
3-
refs/heads/master-next: 3cb1b6a96faa2b634f3746461e132c27f14a5db5
3+
refs/heads/master-next: cfae7bba3d3f27d41cd062478e8fcde6e679f5d2
44
refs/tags/osx-passed: b6b74147ef8a386f532cf9357a1bde006e552c54
55
refs/tags/swift-2.2-SNAPSHOT-2015-12-01-a: 6bb18e013c2284f2b45f5f84f2df2887dc0f7dea
66
refs/tags/swift-2.2-SNAPSHOT-2015-12-01-b: 66d897bfcf64a82cb9a87f5e663d889189d06d07

branches/master-next/include/swift/AST/Decl.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4305,6 +4305,9 @@ class ProtocolDecl final : public NominalTypeDecl {
43054305
/// requirements listed here become entries in the witness table.
43064306
ArrayRef<Requirement> getRequirementSignature() const;
43074307

4308+
/// Is the requirement signature currently being computed?
4309+
bool isComputingRequirementSignature() const;
4310+
43084311
/// Has the requirement signature been computed yet?
43094312
bool isRequirementSignatureComputed() const {
43104313
return RequirementSignature != nullptr;

branches/master-next/include/swift/AST/GenericSignatureBuilder.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1056,7 +1056,7 @@ class GenericSignatureBuilder::RequirementSource final
10561056
WrittenRequirementLoc writtenReqLoc)
10571057
: kind(kind), storageKind(StorageKind::StoredType),
10581058
hasTrailingWrittenRequirementLoc(!writtenReqLoc.isNull()),
1059-
usesRequirementSignature(protocol->isRequirementSignatureComputed()),
1059+
usesRequirementSignature(!protocol->isComputingRequirementSignature()),
10601060
parent(parent) {
10611061
assert((static_cast<bool>(parent) != isRootKind(kind)) &&
10621062
"Root RequirementSource should not have parent (or vice versa)");

branches/master-next/lib/AST/Decl.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4575,6 +4575,11 @@ ArrayRef<Requirement> ProtocolDecl::getRequirementSignature() const {
45754575
None);
45764576
}
45774577

4578+
bool ProtocolDecl::isComputingRequirementSignature() const {
4579+
return getASTContext().evaluator.hasActiveRequest(
4580+
RequirementSignatureRequest{const_cast<ProtocolDecl*>(this)});
4581+
}
4582+
45784583
void ProtocolDecl::setRequirementSignature(ArrayRef<Requirement> requirements) {
45794584
assert(!RequirementSignature && "requirement signature already set");
45804585
if (requirements.empty()) {

branches/master-next/lib/AST/GenericSignatureBuilder.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4107,7 +4107,7 @@ ConstraintResult GenericSignatureBuilder::expandConformanceRequirement(
41074107
// Use the requirement signature to avoid rewalking the entire protocol. This
41084108
// cannot compute the requirement signature directly, because that may be
41094109
// infinitely recursive: this code is also used to construct it.
4110-
if (proto->isRequirementSignatureComputed()) {
4110+
if (!proto->isComputingRequirementSignature()) {
41114111
auto innerSource =
41124112
FloatingRequirementSource::viaProtocolRequirement(source, proto,
41134113
/*inferred=*/false);

0 commit comments

Comments
 (0)