slight refactor, add comment
This commit is contained in:
parent
8024c69c29
commit
8e139eefaf
@ -123,6 +123,9 @@ fn candidates_recur(
|
|||||||
&inspect::ProbeStep::AddGoal(goal) => nested_goals.push(goal),
|
&inspect::ProbeStep::AddGoal(goal) => nested_goals.push(goal),
|
||||||
inspect::ProbeStep::EvaluateGoals(_) => (),
|
inspect::ProbeStep::EvaluateGoals(_) => (),
|
||||||
inspect::ProbeStep::NestedProbe(ref probe) => {
|
inspect::ProbeStep::NestedProbe(ref probe) => {
|
||||||
|
// Nested probes have to prove goals added in their parent
|
||||||
|
// but do not leak them, so we truncate the added goals
|
||||||
|
// afterwards.
|
||||||
let num_goals = nested_goals.len();
|
let num_goals = nested_goals.len();
|
||||||
self.candidates_recur(candidates, nested_goals, probe);
|
self.candidates_recur(candidates, nested_goals, probe);
|
||||||
nested_goals.truncate(num_goals);
|
nested_goals.truncate(num_goals);
|
||||||
@ -131,10 +134,25 @@ fn candidates_recur(
|
|||||||
}
|
}
|
||||||
|
|
||||||
match probe.kind {
|
match probe.kind {
|
||||||
inspect::ProbeKind::Root { result: _ }
|
inspect::ProbeKind::NormalizedSelfTyAssembly
|
||||||
| inspect::ProbeKind::NormalizedSelfTyAssembly
|
|
||||||
| inspect::ProbeKind::UnsizeAssembly
|
| inspect::ProbeKind::UnsizeAssembly
|
||||||
| inspect::ProbeKind::UpcastProjectionCompatibility => (),
|
| inspect::ProbeKind::UpcastProjectionCompatibility => (),
|
||||||
|
// We add a candidate for the root evaluation if there
|
||||||
|
// is only one way to prove a given goal, e.g. for `WellFormed`.
|
||||||
|
//
|
||||||
|
// FIXME: This is currently wrong if we don't even try any
|
||||||
|
// candidates, e.g. for a trait goal, as in this case `candidates` is
|
||||||
|
// actually supposed to be empty.
|
||||||
|
inspect::ProbeKind::Root { result: _ } => {
|
||||||
|
if candidates.is_empty() {
|
||||||
|
candidates.push(InspectCandidate {
|
||||||
|
goal: self,
|
||||||
|
kind: probe.kind,
|
||||||
|
nested_goals: nested_goals.clone(),
|
||||||
|
result,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
inspect::ProbeKind::MiscCandidate { name: _, result }
|
inspect::ProbeKind::MiscCandidate { name: _, result }
|
||||||
| inspect::ProbeKind::TraitCandidate { source: _, result } => {
|
| inspect::ProbeKind::TraitCandidate { source: _, result } => {
|
||||||
candidates.push(InspectCandidate {
|
candidates.push(InspectCandidate {
|
||||||
@ -167,15 +185,6 @@ pub fn candidates(&'a self) -> Vec<InspectCandidate<'a, 'tcx>> {
|
|||||||
let mut nested_goals = vec![];
|
let mut nested_goals = vec![];
|
||||||
self.candidates_recur(&mut candidates, &mut nested_goals, &last_eval_step.evaluation);
|
self.candidates_recur(&mut candidates, &mut nested_goals, &last_eval_step.evaluation);
|
||||||
|
|
||||||
if candidates.is_empty() {
|
|
||||||
candidates.push(InspectCandidate {
|
|
||||||
goal: self,
|
|
||||||
kind: last_eval_step.evaluation.kind,
|
|
||||||
nested_goals,
|
|
||||||
result: self.evaluation.evaluation.result,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
candidates
|
candidates
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user