Skip to content

Commit 2e1c47a

Browse files
committed
[ConstraintLocator] Add a locator path element that stores an opened pack element
generic signature.
1 parent c444a62 commit 2e1c47a

File tree

4 files changed

+25
-0
lines changed

4 files changed

+25
-0
lines changed

include/swift/Sema/ConstraintLocator.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -687,6 +687,21 @@ class LocatorPathElt::PackElement final : public StoredIntegerElement<1> {
687687
}
688688
};
689689

690+
class LocatorPathElt::OpenedPackElement final
691+
: public StoredPointerElement<GenericEnvironment> {
692+
public:
693+
OpenedPackElement(GenericEnvironment *env)
694+
: StoredPointerElement(PathElementKind::OpenedPackElement, env) {}
695+
696+
GenericEnvironment *getGenericEnvironment() const {
697+
return getStoredPointer();
698+
}
699+
700+
static bool classof(const LocatorPathElt *elt) {
701+
return elt->getKind() == PathElementKind::OpenedPackElement;
702+
}
703+
};
704+
690705
class LocatorPathElt::KeyPathComponent final : public StoredIntegerElement<1> {
691706
public:
692707
KeyPathComponent(unsigned index)

include/swift/Sema/ConstraintLocatorPathElts.def

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,9 @@ CUSTOM_LOCATOR_PATH_ELT(PackType)
195195
/// An element of a pack type - the T in <T, U, V, ...>
196196
CUSTOM_LOCATOR_PATH_ELT(PackElement)
197197

198+
/// Stores the generic environment for an opened pack element.
199+
CUSTOM_LOCATOR_PATH_ELT(OpenedPackElement)
200+
198201
/// The shape of a parameter pack.
199202
SIMPLE_LOCATOR_PATH_ELT(PackShape)
200203

lib/Sema/ConstraintLocator.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ unsigned LocatorPathElt::getNewSummaryFlags() const {
9797
case ConstraintLocator::SyntacticElement:
9898
case ConstraintLocator::PackType:
9999
case ConstraintLocator::PackElement:
100+
case ConstraintLocator::OpenedPackElement:
100101
case ConstraintLocator::PackShape:
101102
case ConstraintLocator::PackExpansionPattern:
102103
case ConstraintLocator::PatternBindingElement:
@@ -448,6 +449,11 @@ void LocatorPathElt::dump(raw_ostream &out) const {
448449
break;
449450
}
450451

452+
case ConstraintLocator::OpenedPackElement: {
453+
out << "opened pack element";
454+
break;
455+
}
456+
451457
case ConstraintLocator::PackShape: {
452458
out << "pack shape";
453459
break;

lib/Sema/ConstraintSystem.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5338,6 +5338,7 @@ void constraints::simplifyLocator(ASTNode &anchor,
53385338
break;
53395339

53405340
case ConstraintLocator::PackElement:
5341+
case ConstraintLocator::OpenedPackElement:
53415342
case ConstraintLocator::PackShape:
53425343
break;
53435344

0 commit comments

Comments
 (0)