@@ -1654,6 +1654,20 @@ Type ConstraintSystem::getUnopenedTypeOfReference(
16541654 return requestedType;
16551655}
16561656
1657+ void ConstraintSystem::recordOpenedType (
1658+ ConstraintLocator *locator, ArrayRef<OpenedType> openedTypes) {
1659+ bool inserted = OpenedTypes.insert ({locator, openedTypes}).second ;
1660+ if (inserted) {
1661+ if (isRecordingChanges ())
1662+ recordChange (SolverTrail::Change::recordedOpenedTypes (locator));
1663+ }
1664+ }
1665+
1666+ void ConstraintSystem::removeOpenedType (ConstraintLocator *locator) {
1667+ bool erased = OpenedTypes.erase (locator);
1668+ ASSERT (erased);
1669+ }
1670+
16571671void ConstraintSystem::recordOpenedTypes (
16581672 ConstraintLocatorBuilder locator,
16591673 const OpenedTypeMap &replacements) {
@@ -1673,20 +1687,12 @@ void ConstraintSystem::recordOpenedTypes(
16731687
16741688 ConstraintLocator *locatorPtr = getConstraintLocator (locator);
16751689 assert (locatorPtr && " No locator for opened types?" );
1676- #if false
1677- assert (std::find_if (OpenedTypes.begin (), OpenedTypes.end (),
1678- [&](const std::pair<ConstraintLocator *,
1679- ArrayRef<OpenedType>> &entry) {
1680- return entry.first == locatorPtr;
1681- }) == OpenedTypes.end () &&
1682- " already registered opened types for this locator" );
1683- #endif
16841690
16851691 OpenedType* openedTypes
16861692 = Allocator.Allocate <OpenedType>(replacements.size ());
16871693 std::copy (replacements.begin (), replacements.end (), openedTypes);
1688- OpenedTypes. insert (
1689- { locatorPtr, llvm::ArrayRef (openedTypes, replacements.size ())} );
1694+ recordOpenedType (
1695+ locatorPtr, llvm::ArrayRef (openedTypes, replacements.size ()));
16901696}
16911697
16921698// / Determine how many levels of argument labels should be removed from the
0 commit comments