Skip to content

Commit 637692c

Browse files
committed
[ConstraintSystem] NFC: Define {activate, deactivate}Constraint to make that logic reusable
1 parent 9af6623 commit 637692c

File tree

3 files changed

+29
-29
lines changed

3 files changed

+29
-29
lines changed

lib/Sema/CSSolver.cpp

Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -251,8 +251,7 @@ bool ConstraintSystem::simplify(bool ContinueAfterFailures) {
251251
while (!ActiveConstraints.empty()) {
252252
// Grab the next constraint from the worklist.
253253
auto *constraint = &ActiveConstraints.front();
254-
ActiveConstraints.pop_front();
255-
assert(constraint->isActive() && "Worklist constraint is not active?");
254+
deactivateConstraint(constraint);
256255

257256
// Simplify this constraint.
258257
switch (simplifyConstraint(*constraint)) {
@@ -269,36 +268,21 @@ bool ConstraintSystem::simplify(bool ContinueAfterFailures) {
269268
log << ")\n";
270269
}
271270

272-
if (solverState)
273-
solverState->retireConstraint(constraint);
274-
275-
CG.removeConstraint(constraint);
271+
retireConstraint(constraint);
276272
break;
277273

278274
case SolutionKind::Solved:
279-
if (solverState) {
275+
if (solverState)
280276
++solverState->NumSimplifiedConstraints;
281-
282-
// This constraint has already been solved; retire it.
283-
solverState->retireConstraint(constraint);
284-
}
285-
286-
// Remove the constraint from the constraint graph.
287-
CG.removeConstraint(constraint);
277+
retireConstraint(constraint);
288278
break;
289279

290280
case SolutionKind::Unsolved:
291281
if (solverState)
292282
++solverState->NumUnsimplifiedConstraints;
293-
294-
InactiveConstraints.push_back(constraint);
295283
break;
296284
}
297285

298-
// This constraint is not active. We delay this operation until
299-
// after simplification to avoid re-insertion.
300-
constraint->setActive(false);
301-
302286
// Check whether a constraint failed. If so, we're done.
303287
if (failedConstraint && !ContinueAfterFailures) {
304288
return true;
@@ -388,10 +372,7 @@ ConstraintSystem::SolverState::~SolverState() {
388372
#endif
389373

390374
// Transfer the constraint to "active" set.
391-
CS.ActiveConstraints.splice(CS.ActiveConstraints.end(),
392-
CS.InactiveConstraints, constraint);
393-
394-
constraint->setActive(true);
375+
CS.activateConstraint(constraint);
395376
}
396377

397378
// Restore debugging state.

lib/Sema/ConstraintSystem.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -227,11 +227,8 @@ void ConstraintSystem::addTypeVariableConstraintsToWorkList(
227227
[](Constraint *constraint) { return !constraint->isActive(); });
228228

229229
// Add any constraints that aren't already active to the worklist.
230-
for (auto constraint : inactiveConstraints) {
231-
ActiveConstraints.splice(ActiveConstraints.end(), InactiveConstraints,
232-
constraint);
233-
constraint->setActive(true);
234-
}
230+
for (auto *constraint : inactiveConstraints)
231+
activateConstraint(constraint);
235232
}
236233

237234
/// Retrieve a dynamic result signature for the given declaration.

lib/Sema/ConstraintSystem.h

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1996,6 +1996,28 @@ class ConstraintSystem {
19961996
solverState->retireConstraint(constraint);
19971997
}
19981998

1999+
/// Transfer given constraint from to active list
2000+
/// for solver to attempt its simplification.
2001+
void activateConstraint(Constraint *constraint) {
2002+
assert(!constraint->isActive() && "Constraint is already active");
2003+
ActiveConstraints.splice(ActiveConstraints.end(), InactiveConstraints,
2004+
constraint);
2005+
constraint->setActive(true);
2006+
}
2007+
2008+
void deactivateConstraint(Constraint *constraint) {
2009+
assert(constraint->isActive() && "Constraint is already inactive");
2010+
InactiveConstraints.splice(InactiveConstraints.end(),
2011+
ActiveConstraints, constraint);
2012+
constraint->setActive(false);
2013+
}
2014+
2015+
void retireConstraint(Constraint *constraint) {
2016+
if (constraint->isActive())
2017+
deactivateConstraint(constraint);
2018+
removeInactiveConstraint(constraint);
2019+
}
2020+
19992021
/// Retrieve the list of inactive constraints.
20002022
ConstraintList &getConstraints() { return InactiveConstraints; }
20012023

0 commit comments

Comments
 (0)