Sema: Record pack expansion environments in the trail

This commit is contained in:
Slava Pestov
2024-10-01 14:44:26 -04:00
parent 9afb1a960b
commit f51bf3cf9d
5 changed files with 47 additions and 10 deletions

View File

@@ -2397,7 +2397,7 @@ private:
llvm::SmallDenseMap<PackExpansionType *, TypeVariableType *, 4>
OpenedPackExpansionTypes;
llvm::SmallMapVector<ConstraintLocator *, std::pair<UUID, Type>, 4>
llvm::SmallDenseMap<ConstraintLocator *, std::pair<UUID, Type>, 4>
PackExpansionEnvironments;
llvm::SmallMapVector<PackElementExpr *, PackExpansionExpr *, 2>
@@ -2883,9 +2883,6 @@ public:
/// FIXME: Remove this.
unsigned numFixes;
/// The length of \c PackExpansionEnvironments.
unsigned numPackExpansionEnvironments;
/// The length of \c PackEnvironments.
unsigned numPackEnvironments;
@@ -3464,6 +3461,16 @@ public:
GenericEnvironment *getPackElementEnvironment(ConstraintLocator *locator,
CanType shapeClass);
/// Update PackExpansionEnvironments and record a change in the trail.
void recordPackExpansionEnvironment(ConstraintLocator *locator,
std::pair<UUID, Type> uuidAndShape);
/// Undo the above change.
void removePackExpansionEnvironment(ConstraintLocator *locator) {
bool erased = PackExpansionEnvironments.erase(locator);
ASSERT(erased);
}
/// Get the opened element generic environment for the given pack element.
PackExpansionExpr *getPackEnvironment(PackElementExpr *packElement) const;