Make Canonical::new a free-standing function

This commit is contained in:
Florian Diebold 2021-04-07 20:47:04 +02:00
parent 9b4ecd3723
commit d1b645d236
2 changed files with 13 additions and 11 deletions

View File

@ -1808,7 +1808,7 @@ impl Type {
.push(self.ty.clone())
.fill(args.iter().map(|t| t.ty.clone()))
.build();
let goal = Canonical::new(
let goal = hir_ty::make_canonical(
InEnvironment::new(
self.env.env.clone(),
AliasEq {

View File

@ -107,16 +107,18 @@ pub fn make_only_type_binders<T>(num_vars: usize, value: T) -> Binders<T> {
)
}
impl<T> Canonical<T> {
pub fn new(value: T, kinds: impl IntoIterator<Item = TyVariableKind>) -> Self {
let kinds = kinds.into_iter().map(|tk| {
chalk_ir::CanonicalVarKind::new(
chalk_ir::VariableKind::Ty(tk),
chalk_ir::UniverseIndex::ROOT,
)
});
Self { value, binders: chalk_ir::CanonicalVarKinds::from_iter(&Interner, kinds) }
}
// FIXME: get rid of this
pub fn make_canonical<T>(
value: T,
kinds: impl IntoIterator<Item = TyVariableKind>,
) -> Canonical<T> {
let kinds = kinds.into_iter().map(|tk| {
chalk_ir::CanonicalVarKind::new(
chalk_ir::VariableKind::Ty(tk),
chalk_ir::UniverseIndex::ROOT,
)
});
Canonical { value, binders: chalk_ir::CanonicalVarKinds::from_iter(&Interner, kinds) }
}
/// A function signature as seen by type inference: Several parameter types and