Sema: Record fixed requirements in the trail

This commit is contained in:
Slava Pestov
2024-10-01 11:41:34 -04:00
parent df692edc7c
commit 49487b8893
5 changed files with 86 additions and 11 deletions

View File

@@ -139,6 +139,18 @@ SolverTrail::Change::addedFix(ConstraintFix *fix) {
return result;
}
SolverTrail::Change
SolverTrail::Change::addedFixedRequirement(GenericTypeParamType *GP,
unsigned reqKind,
Type reqTy) {
Change result;
result.Kind = ChangeKind::AddedFixedRequirement;
result.FixedRequirement.GP = GP;
result.FixedRequirement.ReqTy = reqTy;
result.Options = reqKind;
return result;
}
void SolverTrail::Change::undo(ConstraintSystem &cs) const {
auto &cg = cs.getConstraintGraph();
@@ -186,6 +198,11 @@ void SolverTrail::Change::undo(ConstraintSystem &cs) const {
case ChangeKind::AddedFix:
cs.removeFix(Fix);
break;
case ChangeKind::AddedFixedRequirement:
cs.removeFixedRequirement(FixedRequirement.GP, Options,
FixedRequirement.ReqTy);
break;
}
}
@@ -287,6 +304,15 @@ void SolverTrail::Change::dump(llvm::raw_ostream &out,
Fix->print(out);
out << ")\n";
break;
case ChangeKind::AddedFixedRequirement:
out << "(added a fixed requirement ";
FixedRequirement.GP->print(out, PO);
out << " kind ";
out << Options << " ";
FixedRequirement.ReqTy->print(out, PO);
out << ")\n";
break;
}
}