Add mk_canonical_var_infos_from_iter
.
It's missing, and is useful in two places.
This commit is contained in:
parent
11c2c596e4
commit
c09f5b6a6b
3 changed files with 28 additions and 23 deletions
|
@ -102,31 +102,28 @@ pub(crate) fn evaluate_goal<'tcx>(
|
|||
.iter()
|
||||
.map(|p| p.lower_into(interner).fold_with(&mut reverse_param_substitutor)),
|
||||
);
|
||||
let variables: Vec<_> = binders
|
||||
.iter(interner)
|
||||
.map(|var| {
|
||||
let kind = match var.kind {
|
||||
chalk_ir::VariableKind::Ty(ty_kind) => CanonicalVarKind::Ty(match ty_kind {
|
||||
chalk_ir::TyVariableKind::General => CanonicalTyVarKind::General(
|
||||
ty::UniverseIndex::from_usize(var.skip_kind().counter),
|
||||
),
|
||||
chalk_ir::TyVariableKind::Integer => CanonicalTyVarKind::Int,
|
||||
chalk_ir::TyVariableKind::Float => CanonicalTyVarKind::Float,
|
||||
}),
|
||||
chalk_ir::VariableKind::Lifetime => CanonicalVarKind::Region(
|
||||
let variables = binders.iter(interner).map(|var| {
|
||||
let kind = match var.kind {
|
||||
chalk_ir::VariableKind::Ty(ty_kind) => CanonicalVarKind::Ty(match ty_kind {
|
||||
chalk_ir::TyVariableKind::General => CanonicalTyVarKind::General(
|
||||
ty::UniverseIndex::from_usize(var.skip_kind().counter),
|
||||
),
|
||||
// FIXME(compiler-errors): We don't currently have a way of turning
|
||||
// a Chalk ty back into a rustc ty, right?
|
||||
chalk_ir::VariableKind::Const(_) => todo!(),
|
||||
};
|
||||
CanonicalVarInfo { kind }
|
||||
})
|
||||
.collect();
|
||||
chalk_ir::TyVariableKind::Integer => CanonicalTyVarKind::Int,
|
||||
chalk_ir::TyVariableKind::Float => CanonicalTyVarKind::Float,
|
||||
}),
|
||||
chalk_ir::VariableKind::Lifetime => {
|
||||
CanonicalVarKind::Region(ty::UniverseIndex::from_usize(var.skip_kind().counter))
|
||||
}
|
||||
// FIXME(compiler-errors): We don't currently have a way of turning
|
||||
// a Chalk ty back into a rustc ty, right?
|
||||
chalk_ir::VariableKind::Const(_) => todo!(),
|
||||
};
|
||||
CanonicalVarInfo { kind }
|
||||
});
|
||||
let max_universe = binders.iter(interner).map(|v| v.skip_kind().counter).max().unwrap_or(0);
|
||||
let sol = Canonical {
|
||||
max_universe: ty::UniverseIndex::from_usize(max_universe),
|
||||
variables: tcx.mk_canonical_var_infos(&variables),
|
||||
variables: tcx.mk_canonical_var_infos_from_iter(variables),
|
||||
value: QueryResponse {
|
||||
var_values: CanonicalVarValues { var_values },
|
||||
region_constraints: QueryRegionConstraints::default(),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue