Skip to content

Commit aac0574

Browse files
committed
[GSB] Separate out the kind of DelayedRequirement.
DelayedRequirements were using the general RequirementKind, which was at best an approximation (we smoothed over the difference between Superclass and Conformance requirements). Split out the Kind into its own type, so we can extend it with GSB-specific kinds.
1 parent d40e869 commit aac0574

File tree

2 files changed

+34
-7
lines changed

2 files changed

+34
-7
lines changed

include/swift/AST/GenericSignatureBuilder.h

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1678,7 +1678,19 @@ class GenericSignatureBuilder::PotentialArchetype {
16781678
/// Describes a requirement whose processing has been delayed for some reason.
16791679
class GenericSignatureBuilder::DelayedRequirement {
16801680
public:
1681-
RequirementKind kind;
1681+
enum Kind {
1682+
/// A type requirement, which may be a conformance or a superclass
1683+
/// requirement.
1684+
Type,
1685+
1686+
/// A layout requirement.
1687+
Layout,
1688+
1689+
/// A same-type requirement.
1690+
SameType,
1691+
};
1692+
1693+
Kind kind;
16821694
UnresolvedType lhs;
16831695
RequirementRHS rhs;
16841696
FloatingRequirementSource source;

lib/AST/GenericSignatureBuilder.cpp

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1209,9 +1209,25 @@ ConstraintResult GenericSignatureBuilder::handleUnresolvedRequirement(
12091209
FloatingRequirementSource source,
12101210
UnresolvedHandlingKind unresolvedHandling) {
12111211
switch (unresolvedHandling) {
1212-
case UnresolvedHandlingKind::GenerateConstraints:
1213-
Impl->DelayedRequirements.push_back({kind, lhs, rhs, source});
1212+
case UnresolvedHandlingKind::GenerateConstraints: {
1213+
DelayedRequirement::Kind delayedKind;
1214+
switch (kind) {
1215+
case RequirementKind::Conformance:
1216+
case RequirementKind::Superclass:
1217+
delayedKind = DelayedRequirement::Type;
1218+
break;
1219+
1220+
case RequirementKind::Layout:
1221+
delayedKind = DelayedRequirement::Layout;
1222+
break;
1223+
1224+
case RequirementKind::SameType:
1225+
delayedKind = DelayedRequirement::SameType;
1226+
break;
1227+
}
1228+
Impl->DelayedRequirements.push_back({delayedKind, lhs, rhs, source});
12141229
return ConstraintResult::Resolved;
1230+
}
12151231

12161232
case UnresolvedHandlingKind::ReturnUnresolved:
12171233
return ConstraintResult::Unresolved;
@@ -4113,20 +4129,19 @@ void GenericSignatureBuilder::processDelayedRequirements() {
41134129
// Reprocess the delayed requirement.
41144130
ConstraintResult reqResult;
41154131
switch (req.kind) {
4116-
case RequirementKind::Conformance:
4117-
case RequirementKind::Superclass:
4132+
case DelayedRequirement::Type:
41184133
reqResult = addTypeRequirement(
41194134
req.lhs, asUnresolvedType(req.rhs), req.source,
41204135
UnresolvedHandlingKind::ReturnUnresolved);
41214136
break;
41224137

4123-
case RequirementKind::Layout:
4138+
case DelayedRequirement::Layout:
41244139
reqResult = addLayoutRequirement(
41254140
req.lhs, req.rhs.get<LayoutConstraint>(), req.source,
41264141
UnresolvedHandlingKind::ReturnUnresolved);
41274142
break;
41284143

4129-
case RequirementKind::SameType:
4144+
case DelayedRequirement::SameType:
41304145
reqResult = addSameTypeRequirement(
41314146
req.lhs, asUnresolvedType(req.rhs), req.source,
41324147
UnresolvedHandlingKind::ReturnUnresolved);

0 commit comments

Comments
 (0)