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

@@ -868,7 +868,7 @@ ConstraintSystem::getPackElementEnvironment(ConstraintLocator *locator,
auto result = PackExpansionEnvironments.find(locator);
if (result == PackExpansionEnvironments.end()) {
uuidAndShape = std::make_pair(UUID::fromTime(), shapeClass);
PackExpansionEnvironments[locator] = uuidAndShape;
recordPackExpansionEnvironment(locator, uuidAndShape);
} else {
uuidAndShape = result->second;
}
@@ -891,6 +891,17 @@ ConstraintSystem::getPackElementEnvironment(ConstraintLocator *locator,
shapeParam, contextSubs);
}
void ConstraintSystem::recordPackExpansionEnvironment(
ConstraintLocator *locator, std::pair<UUID, Type> uuidAndShape) {
bool inserted = PackExpansionEnvironments.insert({locator, uuidAndShape}).second;
if (inserted) {
if (isRecordingChanges()) {
recordChange(
SolverTrail::Change::recordedPackExpansionEnvironment(locator));
}
}
}
PackExpansionExpr *
ConstraintSystem::getPackEnvironment(PackElementExpr *packElement) const {
const auto match = PackEnvironments.find(packElement);