[ConstraintSystem] Make it possible to anchor a target on a pattern

This commit is contained in:
Pavel Yaskevich
2022-02-25 10:30:05 -08:00
parent efa055c323
commit 49d397cd6a

View File

@@ -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)),