mirror of
https://github.com/rust-lang/rust-analyzer
synced 2025-01-12 21:28:51 +00:00
Upgrade Chalk
This commit is contained in:
parent
3431312418
commit
3659502816
4 changed files with 118 additions and 52 deletions
35
Cargo.lock
generated
35
Cargo.lock
generated
|
@ -114,7 +114,7 @@ checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "chalk-derive"
|
name = "chalk-derive"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/rust-lang/chalk.git?rev=177d71340acc7a7204a33115fc63075d86452179#177d71340acc7a7204a33115fc63075d86452179"
|
source = "git+https://github.com/rust-lang/chalk.git?rev=d383af7333cc6014e9d9e3e77668b5d5b0a5b40e#d383af7333cc6014e9d9e3e77668b5d5b0a5b40e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
@ -124,7 +124,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "chalk-engine"
|
name = "chalk-engine"
|
||||||
version = "0.9.0"
|
version = "0.9.0"
|
||||||
source = "git+https://github.com/rust-lang/chalk.git?rev=177d71340acc7a7204a33115fc63075d86452179#177d71340acc7a7204a33115fc63075d86452179"
|
source = "git+https://github.com/rust-lang/chalk.git?rev=d383af7333cc6014e9d9e3e77668b5d5b0a5b40e#d383af7333cc6014e9d9e3e77668b5d5b0a5b40e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chalk-macros",
|
"chalk-macros",
|
||||||
"rustc-hash",
|
"rustc-hash",
|
||||||
|
@ -133,7 +133,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "chalk-ir"
|
name = "chalk-ir"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/rust-lang/chalk.git?rev=177d71340acc7a7204a33115fc63075d86452179#177d71340acc7a7204a33115fc63075d86452179"
|
source = "git+https://github.com/rust-lang/chalk.git?rev=d383af7333cc6014e9d9e3e77668b5d5b0a5b40e#d383af7333cc6014e9d9e3e77668b5d5b0a5b40e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chalk-derive",
|
"chalk-derive",
|
||||||
"chalk-engine",
|
"chalk-engine",
|
||||||
|
@ -143,7 +143,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "chalk-macros"
|
name = "chalk-macros"
|
||||||
version = "0.1.1"
|
version = "0.1.1"
|
||||||
source = "git+https://github.com/rust-lang/chalk.git?rev=177d71340acc7a7204a33115fc63075d86452179#177d71340acc7a7204a33115fc63075d86452179"
|
source = "git+https://github.com/rust-lang/chalk.git?rev=d383af7333cc6014e9d9e3e77668b5d5b0a5b40e#d383af7333cc6014e9d9e3e77668b5d5b0a5b40e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
]
|
]
|
||||||
|
@ -151,7 +151,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "chalk-rust-ir"
|
name = "chalk-rust-ir"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/rust-lang/chalk.git?rev=177d71340acc7a7204a33115fc63075d86452179#177d71340acc7a7204a33115fc63075d86452179"
|
source = "git+https://github.com/rust-lang/chalk.git?rev=d383af7333cc6014e9d9e3e77668b5d5b0a5b40e#d383af7333cc6014e9d9e3e77668b5d5b0a5b40e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chalk-derive",
|
"chalk-derive",
|
||||||
"chalk-engine",
|
"chalk-engine",
|
||||||
|
@ -162,7 +162,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "chalk-solve"
|
name = "chalk-solve"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/rust-lang/chalk.git?rev=177d71340acc7a7204a33115fc63075d86452179#177d71340acc7a7204a33115fc63075d86452179"
|
source = "git+https://github.com/rust-lang/chalk.git?rev=d383af7333cc6014e9d9e3e77668b5d5b0a5b40e#d383af7333cc6014e9d9e3e77668b5d5b0a5b40e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chalk-derive",
|
"chalk-derive",
|
||||||
"chalk-engine",
|
"chalk-engine",
|
||||||
|
@ -170,7 +170,7 @@ dependencies = [
|
||||||
"chalk-macros",
|
"chalk-macros",
|
||||||
"chalk-rust-ir",
|
"chalk-rust-ir",
|
||||||
"ena",
|
"ena",
|
||||||
"itertools 0.8.2",
|
"itertools",
|
||||||
"petgraph",
|
"petgraph",
|
||||||
"rustc-hash",
|
"rustc-hash",
|
||||||
]
|
]
|
||||||
|
@ -505,15 +505,6 @@ dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "itertools"
|
|
||||||
version = "0.8.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484"
|
|
||||||
dependencies = [
|
|
||||||
"either",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "itertools"
|
name = "itertools"
|
||||||
version = "0.9.0"
|
version = "0.9.0"
|
||||||
|
@ -873,7 +864,7 @@ name = "ra_assists"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"either",
|
"either",
|
||||||
"itertools 0.9.0",
|
"itertools",
|
||||||
"ra_db",
|
"ra_db",
|
||||||
"ra_fmt",
|
"ra_fmt",
|
||||||
"ra_hir",
|
"ra_hir",
|
||||||
|
@ -927,7 +918,7 @@ dependencies = [
|
||||||
name = "ra_fmt"
|
name = "ra_fmt"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"itertools 0.9.0",
|
"itertools",
|
||||||
"ra_syntax",
|
"ra_syntax",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -937,7 +928,7 @@ version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrayvec",
|
"arrayvec",
|
||||||
"either",
|
"either",
|
||||||
"itertools 0.9.0",
|
"itertools",
|
||||||
"log",
|
"log",
|
||||||
"ra_db",
|
"ra_db",
|
||||||
"ra_hir_def",
|
"ra_hir_def",
|
||||||
|
@ -1015,7 +1006,7 @@ dependencies = [
|
||||||
"either",
|
"either",
|
||||||
"indexmap",
|
"indexmap",
|
||||||
"insta",
|
"insta",
|
||||||
"itertools 0.9.0",
|
"itertools",
|
||||||
"log",
|
"log",
|
||||||
"ra_assists",
|
"ra_assists",
|
||||||
"ra_cfg",
|
"ra_cfg",
|
||||||
|
@ -1127,7 +1118,7 @@ name = "ra_syntax"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrayvec",
|
"arrayvec",
|
||||||
"itertools 0.9.0",
|
"itertools",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"ra_parser",
|
"ra_parser",
|
||||||
"ra_text_edit",
|
"ra_text_edit",
|
||||||
|
@ -1305,7 +1296,7 @@ dependencies = [
|
||||||
"crossbeam-channel",
|
"crossbeam-channel",
|
||||||
"env_logger",
|
"env_logger",
|
||||||
"globset",
|
"globset",
|
||||||
"itertools 0.9.0",
|
"itertools",
|
||||||
"jod-thread",
|
"jod-thread",
|
||||||
"log",
|
"log",
|
||||||
"lsp-server",
|
"lsp-server",
|
||||||
|
|
|
@ -23,9 +23,9 @@ ra_prof = { path = "../ra_prof" }
|
||||||
ra_syntax = { path = "../ra_syntax" }
|
ra_syntax = { path = "../ra_syntax" }
|
||||||
test_utils = { path = "../test_utils" }
|
test_utils = { path = "../test_utils" }
|
||||||
|
|
||||||
chalk-solve = { git = "https://github.com/rust-lang/chalk.git", rev = "177d71340acc7a7204a33115fc63075d86452179" }
|
chalk-solve = { git = "https://github.com/rust-lang/chalk.git", rev = "d383af7333cc6014e9d9e3e77668b5d5b0a5b40e" }
|
||||||
chalk-rust-ir = { git = "https://github.com/rust-lang/chalk.git", rev = "177d71340acc7a7204a33115fc63075d86452179" }
|
chalk-rust-ir = { git = "https://github.com/rust-lang/chalk.git", rev = "d383af7333cc6014e9d9e3e77668b5d5b0a5b40e" }
|
||||||
chalk-ir = { git = "https://github.com/rust-lang/chalk.git", rev = "177d71340acc7a7204a33115fc63075d86452179" }
|
chalk-ir = { git = "https://github.com/rust-lang/chalk.git", rev = "d383af7333cc6014e9d9e3e77668b5d5b0a5b40e" }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
insta = "0.15.0"
|
insta = "0.15.0"
|
||||||
|
|
|
@ -153,7 +153,7 @@ pub(crate) fn trait_solve_query(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let canonical = goal.to_chalk(db).cast();
|
let canonical = goal.to_chalk(db).cast(&Interner);
|
||||||
|
|
||||||
// We currently don't deal with universes (I think / hope they're not yet
|
// We currently don't deal with universes (I think / hope they're not yet
|
||||||
// relevant for our use cases?)
|
// relevant for our use cases?)
|
||||||
|
@ -194,8 +194,8 @@ fn solution_from_chalk(
|
||||||
let convert_subst = |subst: chalk_ir::Canonical<chalk_ir::Substitution<Interner>>| {
|
let convert_subst = |subst: chalk_ir::Canonical<chalk_ir::Substitution<Interner>>| {
|
||||||
let value = subst
|
let value = subst
|
||||||
.value
|
.value
|
||||||
.into_iter()
|
.iter(&Interner)
|
||||||
.map(|p| match p.ty() {
|
.map(|p| match p.ty(&Interner) {
|
||||||
Some(ty) => from_chalk(db, ty.clone()),
|
Some(ty) => from_chalk(db, ty.clone()),
|
||||||
None => unimplemented!(),
|
None => unimplemented!(),
|
||||||
})
|
})
|
||||||
|
|
|
@ -59,53 +59,126 @@ impl chalk_ir::interner::Interner for Interner {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn debug_ty(_ty: &chalk_ir::Ty<Self>, _fmt: &mut fmt::Formatter<'_>) -> Option<fmt::Result> {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
|
||||||
|
fn debug_lifetime(
|
||||||
|
_lifetime: &chalk_ir::Lifetime<Self>,
|
||||||
|
_fmt: &mut fmt::Formatter<'_>,
|
||||||
|
) -> Option<fmt::Result> {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
|
||||||
|
fn debug_parameter(
|
||||||
|
_parameter: &Parameter<Self>,
|
||||||
|
_fmt: &mut fmt::Formatter<'_>,
|
||||||
|
) -> Option<fmt::Result> {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
|
||||||
|
fn debug_goal(_goal: &Goal<Self>, _fmt: &mut fmt::Formatter<'_>) -> Option<fmt::Result> {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
|
||||||
|
fn debug_goals(
|
||||||
|
_goals: &chalk_ir::Goals<Self>,
|
||||||
|
_fmt: &mut fmt::Formatter<'_>,
|
||||||
|
) -> Option<fmt::Result> {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
|
||||||
|
fn debug_program_clause_implication(
|
||||||
|
_pci: &chalk_ir::ProgramClauseImplication<Self>,
|
||||||
|
_fmt: &mut fmt::Formatter<'_>,
|
||||||
|
) -> Option<fmt::Result> {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
|
||||||
|
fn debug_application_ty(
|
||||||
|
_application_ty: &chalk_ir::ApplicationTy<Self>,
|
||||||
|
_fmt: &mut fmt::Formatter<'_>,
|
||||||
|
) -> Option<fmt::Result> {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
|
||||||
|
fn debug_substitution(
|
||||||
|
_substitution: &chalk_ir::Substitution<Self>,
|
||||||
|
_fmt: &mut fmt::Formatter<'_>,
|
||||||
|
) -> Option<fmt::Result> {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
|
||||||
|
fn debug_separator_trait_ref(
|
||||||
|
_separator_trait_ref: &chalk_ir::SeparatorTraitRef<Self>,
|
||||||
|
_fmt: &mut fmt::Formatter<'_>,
|
||||||
|
) -> Option<fmt::Result> {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
|
||||||
fn intern_ty(&self, ty: chalk_ir::TyData<Self>) -> Box<chalk_ir::TyData<Self>> {
|
fn intern_ty(&self, ty: chalk_ir::TyData<Self>) -> Box<chalk_ir::TyData<Self>> {
|
||||||
Box::new(ty)
|
Box::new(ty)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn ty_data(ty: &Box<chalk_ir::TyData<Self>>) -> &chalk_ir::TyData<Self> {
|
fn ty_data<'a>(&self, ty: &'a Box<chalk_ir::TyData<Self>>) -> &'a chalk_ir::TyData<Self> {
|
||||||
ty
|
ty
|
||||||
}
|
}
|
||||||
|
|
||||||
fn intern_lifetime(lifetime: chalk_ir::LifetimeData<Self>) -> chalk_ir::LifetimeData<Self> {
|
fn intern_lifetime(
|
||||||
|
&self,
|
||||||
|
lifetime: chalk_ir::LifetimeData<Self>,
|
||||||
|
) -> chalk_ir::LifetimeData<Self> {
|
||||||
lifetime
|
lifetime
|
||||||
}
|
}
|
||||||
|
|
||||||
fn lifetime_data(lifetime: &chalk_ir::LifetimeData<Self>) -> &chalk_ir::LifetimeData<Self> {
|
fn lifetime_data<'a>(
|
||||||
|
&self,
|
||||||
|
lifetime: &'a chalk_ir::LifetimeData<Self>,
|
||||||
|
) -> &'a chalk_ir::LifetimeData<Self> {
|
||||||
lifetime
|
lifetime
|
||||||
}
|
}
|
||||||
|
|
||||||
fn intern_parameter(parameter: chalk_ir::ParameterData<Self>) -> chalk_ir::ParameterData<Self> {
|
fn intern_parameter(
|
||||||
|
&self,
|
||||||
|
parameter: chalk_ir::ParameterData<Self>,
|
||||||
|
) -> chalk_ir::ParameterData<Self> {
|
||||||
parameter
|
parameter
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parameter_data(parameter: &chalk_ir::ParameterData<Self>) -> &chalk_ir::ParameterData<Self> {
|
fn parameter_data<'a>(
|
||||||
|
&self,
|
||||||
|
parameter: &'a chalk_ir::ParameterData<Self>,
|
||||||
|
) -> &'a chalk_ir::ParameterData<Self> {
|
||||||
parameter
|
parameter
|
||||||
}
|
}
|
||||||
|
|
||||||
fn intern_goal(goal: GoalData<Self>) -> Arc<GoalData<Self>> {
|
fn intern_goal(&self, goal: GoalData<Self>) -> Arc<GoalData<Self>> {
|
||||||
Arc::new(goal)
|
Arc::new(goal)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn intern_goals(data: impl IntoIterator<Item = Goal<Self>>) -> Self::InternedGoals {
|
fn intern_goals(&self, data: impl IntoIterator<Item = Goal<Self>>) -> Self::InternedGoals {
|
||||||
data.into_iter().collect()
|
data.into_iter().collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn goal_data(goal: &Arc<GoalData<Self>>) -> &GoalData<Self> {
|
fn goal_data<'a>(&self, goal: &'a Arc<GoalData<Self>>) -> &'a GoalData<Self> {
|
||||||
goal
|
goal
|
||||||
}
|
}
|
||||||
|
|
||||||
fn goals_data(goals: &Vec<Goal<Interner>>) -> &[Goal<Interner>] {
|
fn goals_data<'a>(&self, goals: &'a Vec<Goal<Interner>>) -> &'a [Goal<Interner>] {
|
||||||
goals
|
goals
|
||||||
}
|
}
|
||||||
|
|
||||||
fn intern_substitution<E>(
|
fn intern_substitution<E>(
|
||||||
|
&self,
|
||||||
data: impl IntoIterator<Item = Result<Parameter<Self>, E>>,
|
data: impl IntoIterator<Item = Result<Parameter<Self>, E>>,
|
||||||
) -> Result<Vec<Parameter<Self>>, E> {
|
) -> Result<Vec<Parameter<Self>>, E> {
|
||||||
data.into_iter().collect()
|
data.into_iter().collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn substitution_data(substitution: &Vec<Parameter<Self>>) -> &[Parameter<Self>] {
|
fn substitution_data<'a>(
|
||||||
|
&self,
|
||||||
|
substitution: &'a Vec<Parameter<Self>>,
|
||||||
|
) -> &'a [Parameter<Self>] {
|
||||||
substitution
|
substitution
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -145,12 +218,14 @@ impl ToChalk for Ty {
|
||||||
Ty::Apply(apply_ty) => {
|
Ty::Apply(apply_ty) => {
|
||||||
let name = apply_ty.ctor.to_chalk(db);
|
let name = apply_ty.ctor.to_chalk(db);
|
||||||
let substitution = apply_ty.parameters.to_chalk(db);
|
let substitution = apply_ty.parameters.to_chalk(db);
|
||||||
chalk_ir::ApplicationTy { name, substitution }.cast().intern(&Interner)
|
chalk_ir::ApplicationTy { name, substitution }.cast(&Interner).intern(&Interner)
|
||||||
}
|
}
|
||||||
Ty::Projection(proj_ty) => {
|
Ty::Projection(proj_ty) => {
|
||||||
let associated_ty_id = proj_ty.associated_ty.to_chalk(db);
|
let associated_ty_id = proj_ty.associated_ty.to_chalk(db);
|
||||||
let substitution = proj_ty.parameters.to_chalk(db);
|
let substitution = proj_ty.parameters.to_chalk(db);
|
||||||
chalk_ir::AliasTy { associated_ty_id, substitution }.cast().intern(&Interner)
|
chalk_ir::AliasTy { associated_ty_id, substitution }
|
||||||
|
.cast(&Interner)
|
||||||
|
.intern(&Interner)
|
||||||
}
|
}
|
||||||
Ty::Placeholder(id) => {
|
Ty::Placeholder(id) => {
|
||||||
let interned_id = db.intern_type_param_id(id);
|
let interned_id = db.intern_type_param_id(id);
|
||||||
|
@ -173,14 +248,14 @@ impl ToChalk for Ty {
|
||||||
chalk_ir::TyData::Dyn(bounded_ty).intern(&Interner)
|
chalk_ir::TyData::Dyn(bounded_ty).intern(&Interner)
|
||||||
}
|
}
|
||||||
Ty::Opaque(_) | Ty::Unknown => {
|
Ty::Opaque(_) | Ty::Unknown => {
|
||||||
let substitution = chalk_ir::Substitution::empty();
|
let substitution = chalk_ir::Substitution::empty(&Interner);
|
||||||
let name = TypeName::Error;
|
let name = TypeName::Error;
|
||||||
chalk_ir::ApplicationTy { name, substitution }.cast().intern(&Interner)
|
chalk_ir::ApplicationTy { name, substitution }.cast(&Interner).intern(&Interner)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn from_chalk(db: &dyn HirDatabase, chalk: chalk_ir::Ty<Interner>) -> Self {
|
fn from_chalk(db: &dyn HirDatabase, chalk: chalk_ir::Ty<Interner>) -> Self {
|
||||||
match chalk.data().clone() {
|
match chalk.data(&Interner).clone() {
|
||||||
chalk_ir::TyData::Apply(apply_ty) => match apply_ty.name {
|
chalk_ir::TyData::Apply(apply_ty) => match apply_ty.name {
|
||||||
TypeName::Error => Ty::Unknown,
|
TypeName::Error => Ty::Unknown,
|
||||||
_ => {
|
_ => {
|
||||||
|
@ -218,13 +293,13 @@ impl ToChalk for Substs {
|
||||||
type Chalk = chalk_ir::Substitution<Interner>;
|
type Chalk = chalk_ir::Substitution<Interner>;
|
||||||
|
|
||||||
fn to_chalk(self, db: &dyn HirDatabase) -> chalk_ir::Substitution<Interner> {
|
fn to_chalk(self, db: &dyn HirDatabase) -> chalk_ir::Substitution<Interner> {
|
||||||
chalk_ir::Substitution::from(self.iter().map(|ty| ty.clone().to_chalk(db)))
|
chalk_ir::Substitution::from(&Interner, self.iter().map(|ty| ty.clone().to_chalk(db)))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn from_chalk(db: &dyn HirDatabase, parameters: chalk_ir::Substitution<Interner>) -> Substs {
|
fn from_chalk(db: &dyn HirDatabase, parameters: chalk_ir::Substitution<Interner>) -> Substs {
|
||||||
let tys = parameters
|
let tys = parameters
|
||||||
.into_iter()
|
.iter(&Interner)
|
||||||
.map(|p| match p.ty() {
|
.map(|p| match p.ty(&Interner) {
|
||||||
Some(ty) => from_chalk(db, ty.clone()),
|
Some(ty) => from_chalk(db, ty.clone()),
|
||||||
None => unimplemented!(),
|
None => unimplemented!(),
|
||||||
})
|
})
|
||||||
|
@ -400,8 +475,8 @@ impl ToChalk for Obligation {
|
||||||
|
|
||||||
fn to_chalk(self, db: &dyn HirDatabase) -> chalk_ir::DomainGoal<Interner> {
|
fn to_chalk(self, db: &dyn HirDatabase) -> chalk_ir::DomainGoal<Interner> {
|
||||||
match self {
|
match self {
|
||||||
Obligation::Trait(tr) => tr.to_chalk(db).cast(),
|
Obligation::Trait(tr) => tr.to_chalk(db).cast(&Interner),
|
||||||
Obligation::Projection(pr) => pr.to_chalk(db).cast(),
|
Obligation::Projection(pr) => pr.to_chalk(db).cast(&Interner),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -438,8 +513,8 @@ impl ToChalk for Arc<super::TraitEnvironment> {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
let program_clause: chalk_ir::ProgramClause<Interner> =
|
let program_clause: chalk_ir::ProgramClause<Interner> =
|
||||||
pred.clone().to_chalk(db).cast();
|
pred.clone().to_chalk(db).cast(&Interner);
|
||||||
clauses.push(program_clause.into_from_env_clause());
|
clauses.push(program_clause.into_from_env_clause(&Interner));
|
||||||
}
|
}
|
||||||
chalk_ir::Environment::new().add_clauses(clauses)
|
chalk_ir::Environment::new().add_clauses(clauses)
|
||||||
}
|
}
|
||||||
|
@ -578,9 +653,9 @@ impl<'a> chalk_solve::RustIrDatabase<Interner> for ChalkContext<'a> {
|
||||||
.map(|impl_| impl_.to_chalk(self.db))
|
.map(|impl_| impl_.to_chalk(self.db))
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
let ty: Ty = from_chalk(self.db, parameters[0].assert_ty_ref().clone());
|
let ty: Ty = from_chalk(self.db, parameters[0].assert_ty_ref(&Interner).clone());
|
||||||
let arg: Option<Ty> =
|
let arg: Option<Ty> =
|
||||||
parameters.get(1).map(|p| from_chalk(self.db, p.assert_ty_ref().clone()));
|
parameters.get(1).map(|p| from_chalk(self.db, p.assert_ty_ref(&Interner).clone()));
|
||||||
|
|
||||||
builtin::get_builtin_impls(self.db, self.krate, &ty, &arg, trait_, |i| {
|
builtin::get_builtin_impls(self.db, self.krate, &ty, &arg, trait_, |i| {
|
||||||
result.push(i.to_chalk(self.db))
|
result.push(i.to_chalk(self.db))
|
||||||
|
|
Loading…
Reference in a new issue