mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
[ConstraintSystem] Make it possible to anchor a target on a pattern
This commit is contained in:
@@ -966,6 +966,7 @@ public:
|
||||
stmtCondElement,
|
||||
expr,
|
||||
stmt,
|
||||
pattern,
|
||||
patternBindingEntry,
|
||||
varDecl,
|
||||
};
|
||||
@@ -980,6 +981,8 @@ private:
|
||||
|
||||
const Stmt *stmt;
|
||||
|
||||
const Pattern *pattern;
|
||||
|
||||
struct PatternBindingEntry {
|
||||
const PatternBindingDecl *patternBinding;
|
||||
unsigned index;
|
||||
@@ -1009,6 +1012,11 @@ public:
|
||||
storage.stmt = stmt;
|
||||
}
|
||||
|
||||
SolutionApplicationTargetsKey(const Pattern *pattern) {
|
||||
kind = Kind::pattern;
|
||||
storage.pattern = pattern;
|
||||
}
|
||||
|
||||
SolutionApplicationTargetsKey(
|
||||
const PatternBindingDecl *patternBinding, unsigned index) {
|
||||
kind = Kind::patternBindingEntry;
|
||||
@@ -1040,6 +1048,9 @@ public:
|
||||
case Kind::stmt:
|
||||
return lhs.storage.stmt == rhs.storage.stmt;
|
||||
|
||||
case Kind::pattern:
|
||||
return lhs.storage.pattern == rhs.storage.pattern;
|
||||
|
||||
case Kind::patternBindingEntry:
|
||||
return (lhs.storage.patternBindingEntry.patternBinding
|
||||
== rhs.storage.patternBindingEntry.patternBinding) &&
|
||||
@@ -1081,6 +1092,11 @@ public:
|
||||
DenseMapInfo<unsigned>::getHashValue(static_cast<unsigned>(kind)),
|
||||
DenseMapInfo<void *>::getHashValue(storage.stmt));
|
||||
|
||||
case Kind::pattern:
|
||||
return hash_combine(
|
||||
DenseMapInfo<unsigned>::getHashValue(static_cast<unsigned>(kind)),
|
||||
DenseMapInfo<void *>::getHashValue(storage.pattern));
|
||||
|
||||
case Kind::patternBindingEntry:
|
||||
return hash_combine(
|
||||
DenseMapInfo<unsigned>::getHashValue(static_cast<unsigned>(kind)),
|
||||
|
||||
Reference in New Issue
Block a user