Merge #4568
4568: Update Chalk r=matklad a=flodiebold As always, this just makes compilation work, we don't use the newly available functionality yet. Co-authored-by: Florian Diebold <florian.diebold@freiheit.com>
This commit is contained in:
commit
0fb7134915
41
Cargo.lock
generated
41
Cargo.lock
generated
@ -114,7 +114,7 @@ checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "chalk-derive"
|
name = "chalk-derive"
|
||||||
version = "0.10.1-dev"
|
version = "0.10.1-dev"
|
||||||
source = "git+https://github.com/rust-lang/chalk.git?rev=3e9c2503ae9c5277c2acb74624dc267876dd89b3#3e9c2503ae9c5277c2acb74624dc267876dd89b3"
|
source = "git+https://github.com/rust-lang/chalk.git?rev=eaab84b394007d1bed15f5470409a6ea02900a96#eaab84b394007d1bed15f5470409a6ea02900a96"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@ -125,7 +125,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "chalk-engine"
|
name = "chalk-engine"
|
||||||
version = "0.10.1-dev"
|
version = "0.10.1-dev"
|
||||||
source = "git+https://github.com/rust-lang/chalk.git?rev=3e9c2503ae9c5277c2acb74624dc267876dd89b3#3e9c2503ae9c5277c2acb74624dc267876dd89b3"
|
source = "git+https://github.com/rust-lang/chalk.git?rev=eaab84b394007d1bed15f5470409a6ea02900a96#eaab84b394007d1bed15f5470409a6ea02900a96"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chalk-macros",
|
"chalk-macros",
|
||||||
"rustc-hash",
|
"rustc-hash",
|
||||||
@ -134,7 +134,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "chalk-ir"
|
name = "chalk-ir"
|
||||||
version = "0.10.1-dev"
|
version = "0.10.1-dev"
|
||||||
source = "git+https://github.com/rust-lang/chalk.git?rev=3e9c2503ae9c5277c2acb74624dc267876dd89b3#3e9c2503ae9c5277c2acb74624dc267876dd89b3"
|
source = "git+https://github.com/rust-lang/chalk.git?rev=eaab84b394007d1bed15f5470409a6ea02900a96#eaab84b394007d1bed15f5470409a6ea02900a96"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chalk-derive",
|
"chalk-derive",
|
||||||
"chalk-engine",
|
"chalk-engine",
|
||||||
@ -144,7 +144,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "chalk-macros"
|
name = "chalk-macros"
|
||||||
version = "0.10.1-dev"
|
version = "0.10.1-dev"
|
||||||
source = "git+https://github.com/rust-lang/chalk.git?rev=3e9c2503ae9c5277c2acb74624dc267876dd89b3#3e9c2503ae9c5277c2acb74624dc267876dd89b3"
|
source = "git+https://github.com/rust-lang/chalk.git?rev=eaab84b394007d1bed15f5470409a6ea02900a96#eaab84b394007d1bed15f5470409a6ea02900a96"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
]
|
]
|
||||||
@ -152,7 +152,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "chalk-rust-ir"
|
name = "chalk-rust-ir"
|
||||||
version = "0.10.1-dev"
|
version = "0.10.1-dev"
|
||||||
source = "git+https://github.com/rust-lang/chalk.git?rev=3e9c2503ae9c5277c2acb74624dc267876dd89b3#3e9c2503ae9c5277c2acb74624dc267876dd89b3"
|
source = "git+https://github.com/rust-lang/chalk.git?rev=eaab84b394007d1bed15f5470409a6ea02900a96#eaab84b394007d1bed15f5470409a6ea02900a96"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chalk-derive",
|
"chalk-derive",
|
||||||
"chalk-engine",
|
"chalk-engine",
|
||||||
@ -163,14 +163,14 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "chalk-solve"
|
name = "chalk-solve"
|
||||||
version = "0.10.1-dev"
|
version = "0.10.1-dev"
|
||||||
source = "git+https://github.com/rust-lang/chalk.git?rev=3e9c2503ae9c5277c2acb74624dc267876dd89b3#3e9c2503ae9c5277c2acb74624dc267876dd89b3"
|
source = "git+https://github.com/rust-lang/chalk.git?rev=eaab84b394007d1bed15f5470409a6ea02900a96#eaab84b394007d1bed15f5470409a6ea02900a96"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chalk-derive",
|
"chalk-derive",
|
||||||
"chalk-engine",
|
"chalk-engine",
|
||||||
"chalk-ir",
|
"chalk-ir",
|
||||||
"chalk-macros",
|
"chalk-macros",
|
||||||
"chalk-rust-ir",
|
"chalk-rust-ir",
|
||||||
"ena 0.13.1",
|
"ena",
|
||||||
"itertools",
|
"itertools",
|
||||||
"petgraph",
|
"petgraph",
|
||||||
"rustc-hash",
|
"rustc-hash",
|
||||||
@ -307,15 +307,6 @@ version = "1.5.3"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3"
|
checksum = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "ena"
|
|
||||||
version = "0.13.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "8944dc8fa28ce4a38f778bd46bf7d923fe73eed5a439398507246c8e017e6f36"
|
|
||||||
dependencies = [
|
|
||||||
"log",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ena"
|
name = "ena"
|
||||||
version = "0.14.0"
|
version = "0.14.0"
|
||||||
@ -354,9 +345,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fixedbitset"
|
name = "fixedbitset"
|
||||||
version = "0.1.9"
|
version = "0.2.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "86d4de0081402f5e88cdac65c8dcdcc73118c1a7a465e2a05f0da05843a8ea33"
|
checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fnv"
|
name = "fnv"
|
||||||
@ -813,12 +804,6 @@ version = "1.4.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0b631f7e854af39a1739f401cf34a8a013dfe09eac4fa4dba91e9768bd28168d"
|
checksum = "0b631f7e854af39a1739f401cf34a8a013dfe09eac4fa4dba91e9768bd28168d"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "ordermap"
|
|
||||||
version = "0.3.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "a86ed3f5f244b372d6b1a00b72ef7f8876d0bc6a78a4c9985c53614041512063"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "parking_lot"
|
name = "parking_lot"
|
||||||
version = "0.10.2"
|
version = "0.10.2"
|
||||||
@ -873,12 +858,12 @@ checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "petgraph"
|
name = "petgraph"
|
||||||
version = "0.4.13"
|
version = "0.5.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9c3659d1ee90221741f65dd128d9998311b0e40c5d3c23a62445938214abce4f"
|
checksum = "29c127eea4a29ec6c85d153c59dc1213f33ec74cead30fe4730aecc88cc1fd92"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"fixedbitset",
|
"fixedbitset",
|
||||||
"ordermap",
|
"indexmap",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -1053,7 +1038,7 @@ dependencies = [
|
|||||||
"chalk-ir",
|
"chalk-ir",
|
||||||
"chalk-rust-ir",
|
"chalk-rust-ir",
|
||||||
"chalk-solve",
|
"chalk-solve",
|
||||||
"ena 0.14.0",
|
"ena",
|
||||||
"insta",
|
"insta",
|
||||||
"itertools",
|
"itertools",
|
||||||
"log",
|
"log",
|
||||||
|
@ -27,9 +27,9 @@ test_utils = { path = "../test_utils" }
|
|||||||
|
|
||||||
scoped-tls = "1"
|
scoped-tls = "1"
|
||||||
|
|
||||||
chalk-solve = { git = "https://github.com/rust-lang/chalk.git", rev = "3e9c2503ae9c5277c2acb74624dc267876dd89b3" }
|
chalk-solve = { git = "https://github.com/rust-lang/chalk.git", rev = "eaab84b394007d1bed15f5470409a6ea02900a96" }
|
||||||
chalk-rust-ir = { git = "https://github.com/rust-lang/chalk.git", rev = "3e9c2503ae9c5277c2acb74624dc267876dd89b3" }
|
chalk-rust-ir = { git = "https://github.com/rust-lang/chalk.git", rev = "eaab84b394007d1bed15f5470409a6ea02900a96" }
|
||||||
chalk-ir = { git = "https://github.com/rust-lang/chalk.git", rev = "3e9c2503ae9c5277c2acb74624dc267876dd89b3" }
|
chalk-ir = { git = "https://github.com/rust-lang/chalk.git", rev = "eaab84b394007d1bed15f5470409a6ea02900a96" }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
insta = "0.16.0"
|
insta = "0.16.0"
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
use log::debug;
|
use log::debug;
|
||||||
|
|
||||||
use chalk_ir::{
|
use chalk_ir::{
|
||||||
cast::Cast, fold::shift::Shift, interner::HasInterner, Goal, GoalData, Parameter,
|
cast::Cast, fold::shift::Shift, interner::HasInterner, GenericArg, Goal, GoalData,
|
||||||
PlaceholderIndex, TypeName, UniverseIndex,
|
PlaceholderIndex, TypeName, UniverseIndex,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -26,24 +26,24 @@
|
|||||||
pub struct Interner;
|
pub struct Interner;
|
||||||
|
|
||||||
impl chalk_ir::interner::Interner for Interner {
|
impl chalk_ir::interner::Interner for Interner {
|
||||||
type InternedType = Box<chalk_ir::TyData<Self>>;
|
type InternedType = Box<chalk_ir::TyData<Self>>; // FIXME use Arc?
|
||||||
type InternedLifetime = chalk_ir::LifetimeData<Self>;
|
type InternedLifetime = chalk_ir::LifetimeData<Self>;
|
||||||
type InternedParameter = chalk_ir::ParameterData<Self>;
|
type InternedConst = Arc<chalk_ir::ConstData<Self>>;
|
||||||
|
type InternedConcreteConst = ();
|
||||||
|
type InternedGenericArg = chalk_ir::GenericArgData<Self>;
|
||||||
type InternedGoal = Arc<GoalData<Self>>;
|
type InternedGoal = Arc<GoalData<Self>>;
|
||||||
type InternedGoals = Vec<Goal<Self>>;
|
type InternedGoals = Vec<Goal<Self>>;
|
||||||
type InternedSubstitution = Vec<Parameter<Self>>;
|
type InternedSubstitution = Vec<GenericArg<Self>>;
|
||||||
type InternedProgramClause = chalk_ir::ProgramClauseData<Self>;
|
type InternedProgramClause = chalk_ir::ProgramClauseData<Self>;
|
||||||
type InternedProgramClauses = Arc<[chalk_ir::ProgramClause<Self>]>;
|
type InternedProgramClauses = Arc<[chalk_ir::ProgramClause<Self>]>;
|
||||||
type InternedQuantifiedWhereClauses = Vec<chalk_ir::QuantifiedWhereClause<Self>>;
|
type InternedQuantifiedWhereClauses = Vec<chalk_ir::QuantifiedWhereClause<Self>>;
|
||||||
type InternedParameterKinds = Vec<chalk_ir::ParameterKind<()>>;
|
type InternedVariableKinds = Vec<chalk_ir::VariableKind<Self>>;
|
||||||
type InternedCanonicalVarKinds = Vec<chalk_ir::ParameterKind<UniverseIndex>>;
|
type InternedCanonicalVarKinds = Vec<chalk_ir::CanonicalVarKind<Self>>;
|
||||||
type Identifier = TypeAliasId;
|
|
||||||
type DefId = InternId;
|
type DefId = InternId;
|
||||||
|
type InternedAdtId = InternId;
|
||||||
|
type Identifier = TypeAliasId;
|
||||||
|
|
||||||
fn debug_struct_id(
|
fn debug_adt_id(type_kind_id: StructId, fmt: &mut fmt::Formatter<'_>) -> Option<fmt::Result> {
|
||||||
type_kind_id: StructId,
|
|
||||||
fmt: &mut fmt::Formatter<'_>,
|
|
||||||
) -> Option<fmt::Result> {
|
|
||||||
tls::with_current_program(|prog| Some(prog?.debug_struct_id(type_kind_id, fmt)))
|
tls::with_current_program(|prog| Some(prog?.debug_struct_id(type_kind_id, fmt)))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,11 +94,11 @@ fn debug_lifetime(
|
|||||||
tls::with_current_program(|prog| Some(prog?.debug_lifetime(lifetime, fmt)))
|
tls::with_current_program(|prog| Some(prog?.debug_lifetime(lifetime, fmt)))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn debug_parameter(
|
fn debug_generic_arg(
|
||||||
parameter: &Parameter<Interner>,
|
parameter: &GenericArg<Interner>,
|
||||||
fmt: &mut fmt::Formatter<'_>,
|
fmt: &mut fmt::Formatter<'_>,
|
||||||
) -> Option<fmt::Result> {
|
) -> Option<fmt::Result> {
|
||||||
tls::with_current_program(|prog| Some(prog?.debug_parameter(parameter, fmt)))
|
tls::with_current_program(|prog| Some(prog?.debug_generic_arg(parameter, fmt)))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn debug_goal(goal: &Goal<Interner>, fmt: &mut fmt::Formatter<'_>) -> Option<fmt::Result> {
|
fn debug_goal(goal: &Goal<Interner>, fmt: &mut fmt::Formatter<'_>) -> Option<fmt::Result> {
|
||||||
@ -164,17 +164,32 @@ fn lifetime_data<'a>(
|
|||||||
lifetime
|
lifetime
|
||||||
}
|
}
|
||||||
|
|
||||||
fn intern_parameter(
|
fn intern_const(&self, constant: chalk_ir::ConstData<Self>) -> Arc<chalk_ir::ConstData<Self>> {
|
||||||
|
Arc::new(constant)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn const_data<'a>(
|
||||||
&self,
|
&self,
|
||||||
parameter: chalk_ir::ParameterData<Self>,
|
constant: &'a Arc<chalk_ir::ConstData<Self>>,
|
||||||
) -> chalk_ir::ParameterData<Self> {
|
) -> &'a chalk_ir::ConstData<Self> {
|
||||||
|
constant
|
||||||
|
}
|
||||||
|
|
||||||
|
fn const_eq(&self, _ty: &Box<chalk_ir::TyData<Self>>, _c1: &(), _c2: &()) -> bool {
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
|
fn intern_generic_arg(
|
||||||
|
&self,
|
||||||
|
parameter: chalk_ir::GenericArgData<Self>,
|
||||||
|
) -> chalk_ir::GenericArgData<Self> {
|
||||||
parameter
|
parameter
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parameter_data<'a>(
|
fn generic_arg_data<'a>(
|
||||||
&self,
|
&self,
|
||||||
parameter: &'a chalk_ir::ParameterData<Self>,
|
parameter: &'a chalk_ir::GenericArgData<Self>,
|
||||||
) -> &'a chalk_ir::ParameterData<Self> {
|
) -> &'a chalk_ir::GenericArgData<Self> {
|
||||||
parameter
|
parameter
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -199,15 +214,15 @@ fn goals_data<'a>(&self, goals: &'a Vec<Goal<Interner>>) -> &'a [Goal<Interner>]
|
|||||||
|
|
||||||
fn intern_substitution<E>(
|
fn intern_substitution<E>(
|
||||||
&self,
|
&self,
|
||||||
data: impl IntoIterator<Item = Result<Parameter<Self>, E>>,
|
data: impl IntoIterator<Item = Result<GenericArg<Self>, E>>,
|
||||||
) -> Result<Vec<Parameter<Self>>, E> {
|
) -> Result<Vec<GenericArg<Self>>, E> {
|
||||||
data.into_iter().collect()
|
data.into_iter().collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn substitution_data<'a>(
|
fn substitution_data<'a>(
|
||||||
&self,
|
&self,
|
||||||
substitution: &'a Vec<Parameter<Self>>,
|
substitution: &'a Vec<GenericArg<Self>>,
|
||||||
) -> &'a [Parameter<Self>] {
|
) -> &'a [GenericArg<Self>] {
|
||||||
substitution
|
substitution
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -253,23 +268,23 @@ fn quantified_where_clauses_data<'a>(
|
|||||||
clauses
|
clauses
|
||||||
}
|
}
|
||||||
|
|
||||||
fn intern_parameter_kinds<E>(
|
fn intern_generic_arg_kinds<E>(
|
||||||
&self,
|
&self,
|
||||||
data: impl IntoIterator<Item = Result<chalk_ir::ParameterKind<()>, E>>,
|
data: impl IntoIterator<Item = Result<chalk_ir::VariableKind<Self>, E>>,
|
||||||
) -> Result<Self::InternedParameterKinds, E> {
|
) -> Result<Self::InternedVariableKinds, E> {
|
||||||
data.into_iter().collect()
|
data.into_iter().collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parameter_kinds_data<'a>(
|
fn variable_kinds_data<'a>(
|
||||||
&self,
|
&self,
|
||||||
parameter_kinds: &'a Self::InternedParameterKinds,
|
parameter_kinds: &'a Self::InternedVariableKinds,
|
||||||
) -> &'a [chalk_ir::ParameterKind<()>] {
|
) -> &'a [chalk_ir::VariableKind<Self>] {
|
||||||
¶meter_kinds
|
¶meter_kinds
|
||||||
}
|
}
|
||||||
|
|
||||||
fn intern_canonical_var_kinds<E>(
|
fn intern_canonical_var_kinds<E>(
|
||||||
&self,
|
&self,
|
||||||
data: impl IntoIterator<Item = Result<chalk_ir::ParameterKind<UniverseIndex>, E>>,
|
data: impl IntoIterator<Item = Result<chalk_ir::CanonicalVarKind<Self>, E>>,
|
||||||
) -> Result<Self::InternedCanonicalVarKinds, E> {
|
) -> Result<Self::InternedCanonicalVarKinds, E> {
|
||||||
data.into_iter().collect()
|
data.into_iter().collect()
|
||||||
}
|
}
|
||||||
@ -277,7 +292,7 @@ fn intern_canonical_var_kinds<E>(
|
|||||||
fn canonical_var_kinds_data<'a>(
|
fn canonical_var_kinds_data<'a>(
|
||||||
&self,
|
&self,
|
||||||
canonical_var_kinds: &'a Self::InternedCanonicalVarKinds,
|
canonical_var_kinds: &'a Self::InternedCanonicalVarKinds,
|
||||||
) -> &'a [chalk_ir::ParameterKind<UniverseIndex>] {
|
) -> &'a [chalk_ir::CanonicalVarKind<Self>] {
|
||||||
&canonical_var_kinds
|
&canonical_var_kinds
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -290,8 +305,8 @@ impl chalk_ir::interner::HasInterner for Interner {
|
|||||||
pub type AssociatedTyDatum = chalk_rust_ir::AssociatedTyDatum<Interner>;
|
pub type AssociatedTyDatum = chalk_rust_ir::AssociatedTyDatum<Interner>;
|
||||||
pub type TraitId = chalk_ir::TraitId<Interner>;
|
pub type TraitId = chalk_ir::TraitId<Interner>;
|
||||||
pub type TraitDatum = chalk_rust_ir::TraitDatum<Interner>;
|
pub type TraitDatum = chalk_rust_ir::TraitDatum<Interner>;
|
||||||
pub type StructId = chalk_ir::StructId<Interner>;
|
pub type StructId = chalk_ir::AdtId<Interner>;
|
||||||
pub type StructDatum = chalk_rust_ir::StructDatum<Interner>;
|
pub type StructDatum = chalk_rust_ir::AdtDatum<Interner>;
|
||||||
pub type ImplId = chalk_ir::ImplId<Interner>;
|
pub type ImplId = chalk_ir::ImplId<Interner>;
|
||||||
pub type ImplDatum = chalk_rust_ir::ImplDatum<Interner>;
|
pub type ImplDatum = chalk_rust_ir::ImplDatum<Interner>;
|
||||||
pub type AssociatedTyValueId = chalk_rust_ir::AssociatedTyValueId<Interner>;
|
pub type AssociatedTyValueId = chalk_rust_ir::AssociatedTyValueId<Interner>;
|
||||||
@ -453,14 +468,14 @@ fn to_chalk(self, db: &dyn HirDatabase) -> TypeName<Interner> {
|
|||||||
_ => {
|
_ => {
|
||||||
// other TypeCtors get interned and turned into a chalk StructId
|
// other TypeCtors get interned and turned into a chalk StructId
|
||||||
let struct_id = db.intern_type_ctor(self).into();
|
let struct_id = db.intern_type_ctor(self).into();
|
||||||
TypeName::Struct(struct_id)
|
TypeName::Adt(struct_id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn from_chalk(db: &dyn HirDatabase, type_name: TypeName<Interner>) -> TypeCtor {
|
fn from_chalk(db: &dyn HirDatabase, type_name: TypeName<Interner>) -> TypeCtor {
|
||||||
match type_name {
|
match type_name {
|
||||||
TypeName::Struct(struct_id) => db.lookup_intern_type_ctor(struct_id.into()),
|
TypeName::Adt(struct_id) => db.lookup_intern_type_ctor(struct_id.into()),
|
||||||
TypeName::AssociatedType(type_id) => TypeCtor::AssociatedType(from_chalk(db, type_id)),
|
TypeName::AssociatedType(type_id) => TypeCtor::AssociatedType(from_chalk(db, type_id)),
|
||||||
TypeName::OpaqueType(_) => unreachable!(),
|
TypeName::OpaqueType(_) => unreachable!(),
|
||||||
|
|
||||||
@ -471,6 +486,8 @@ fn from_chalk(db: &dyn HirDatabase, type_name: TypeName<Interner>) -> TypeCtor {
|
|||||||
TypeName::Ref(_) => unreachable!(),
|
TypeName::Ref(_) => unreachable!(),
|
||||||
TypeName::Str => unreachable!(),
|
TypeName::Str => unreachable!(),
|
||||||
|
|
||||||
|
TypeName::FnDef(_) => unreachable!(),
|
||||||
|
|
||||||
TypeName::Error => {
|
TypeName::Error => {
|
||||||
// this should not be reached, since we don't represent TypeName::Error with TypeCtor
|
// this should not be reached, since we don't represent TypeName::Error with TypeCtor
|
||||||
unreachable!()
|
unreachable!()
|
||||||
@ -622,7 +639,10 @@ impl<T> ToChalk for Canonical<T>
|
|||||||
type Chalk = chalk_ir::Canonical<T::Chalk>;
|
type Chalk = chalk_ir::Canonical<T::Chalk>;
|
||||||
|
|
||||||
fn to_chalk(self, db: &dyn HirDatabase) -> chalk_ir::Canonical<T::Chalk> {
|
fn to_chalk(self, db: &dyn HirDatabase) -> chalk_ir::Canonical<T::Chalk> {
|
||||||
let parameter = chalk_ir::ParameterKind::Ty(chalk_ir::UniverseIndex::ROOT);
|
let parameter = chalk_ir::CanonicalVarKind::new(
|
||||||
|
chalk_ir::VariableKind::Ty,
|
||||||
|
chalk_ir::UniverseIndex::ROOT,
|
||||||
|
);
|
||||||
let value = self.value.to_chalk(db);
|
let value = self.value.to_chalk(db);
|
||||||
chalk_ir::Canonical {
|
chalk_ir::Canonical {
|
||||||
value,
|
value,
|
||||||
@ -738,9 +758,9 @@ fn make_binders<T>(value: T, num_vars: usize) -> chalk_ir::Binders<T>
|
|||||||
T: HasInterner<Interner = Interner>,
|
T: HasInterner<Interner = Interner>,
|
||||||
{
|
{
|
||||||
chalk_ir::Binders::new(
|
chalk_ir::Binders::new(
|
||||||
chalk_ir::ParameterKinds::from(
|
chalk_ir::VariableKinds::from(
|
||||||
&Interner,
|
&Interner,
|
||||||
std::iter::repeat(chalk_ir::ParameterKind::Ty(())).take(num_vars),
|
std::iter::repeat(chalk_ir::VariableKind::Ty).take(num_vars),
|
||||||
),
|
),
|
||||||
value,
|
value,
|
||||||
)
|
)
|
||||||
@ -819,16 +839,25 @@ fn associated_ty_data(&self, id: AssocTypeId) -> Arc<AssociatedTyDatum> {
|
|||||||
fn trait_datum(&self, trait_id: TraitId) -> Arc<TraitDatum> {
|
fn trait_datum(&self, trait_id: TraitId) -> Arc<TraitDatum> {
|
||||||
self.db.trait_datum(self.krate, trait_id)
|
self.db.trait_datum(self.krate, trait_id)
|
||||||
}
|
}
|
||||||
fn struct_datum(&self, struct_id: StructId) -> Arc<StructDatum> {
|
fn adt_datum(&self, struct_id: StructId) -> Arc<StructDatum> {
|
||||||
self.db.struct_datum(self.krate, struct_id)
|
self.db.struct_datum(self.krate, struct_id)
|
||||||
}
|
}
|
||||||
fn impl_datum(&self, impl_id: ImplId) -> Arc<ImplDatum> {
|
fn impl_datum(&self, impl_id: ImplId) -> Arc<ImplDatum> {
|
||||||
self.db.impl_datum(self.krate, impl_id)
|
self.db.impl_datum(self.krate, impl_id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn fn_def_datum(
|
||||||
|
&self,
|
||||||
|
_fn_def_id: chalk_ir::FnDefId<Interner>,
|
||||||
|
) -> Arc<chalk_rust_ir::FnDefDatum<Interner>> {
|
||||||
|
// We don't yet provide any FnDefs to Chalk
|
||||||
|
unimplemented!()
|
||||||
|
}
|
||||||
|
|
||||||
fn impls_for_trait(
|
fn impls_for_trait(
|
||||||
&self,
|
&self,
|
||||||
trait_id: TraitId,
|
trait_id: TraitId,
|
||||||
parameters: &[Parameter<Interner>],
|
parameters: &[GenericArg<Interner>],
|
||||||
) -> Vec<ImplId> {
|
) -> Vec<ImplId> {
|
||||||
debug!("impls_for_trait {:?}", trait_id);
|
debug!("impls_for_trait {:?}", trait_id);
|
||||||
let trait_: hir_def::TraitId = from_chalk(self.db, trait_id);
|
let trait_: hir_def::TraitId = from_chalk(self.db, trait_id);
|
||||||
@ -1000,7 +1029,7 @@ pub(crate) fn struct_datum_query(
|
|||||||
struct_id: StructId,
|
struct_id: StructId,
|
||||||
) -> Arc<StructDatum> {
|
) -> Arc<StructDatum> {
|
||||||
debug!("struct_datum {:?}", struct_id);
|
debug!("struct_datum {:?}", struct_id);
|
||||||
let type_ctor: TypeCtor = from_chalk(db, TypeName::Struct(struct_id));
|
let type_ctor: TypeCtor = from_chalk(db, TypeName::Adt(struct_id));
|
||||||
debug!("struct {:?} = {:?}", struct_id, type_ctor);
|
debug!("struct {:?} = {:?}", struct_id, type_ctor);
|
||||||
let num_params = type_ctor.num_ty_params(db);
|
let num_params = type_ctor.num_ty_params(db);
|
||||||
let upstream = type_ctor.krate(db) != Some(krate);
|
let upstream = type_ctor.krate(db) != Some(krate);
|
||||||
@ -1012,12 +1041,12 @@ pub(crate) fn struct_datum_query(
|
|||||||
convert_where_clauses(db, generic_def, &bound_vars)
|
convert_where_clauses(db, generic_def, &bound_vars)
|
||||||
})
|
})
|
||||||
.unwrap_or_else(Vec::new);
|
.unwrap_or_else(Vec::new);
|
||||||
let flags = chalk_rust_ir::StructFlags {
|
let flags = chalk_rust_ir::AdtFlags {
|
||||||
upstream,
|
upstream,
|
||||||
// FIXME set fundamental flag correctly
|
// FIXME set fundamental flag correctly
|
||||||
fundamental: false,
|
fundamental: false,
|
||||||
};
|
};
|
||||||
let struct_datum_bound = chalk_rust_ir::StructDatumBound {
|
let struct_datum_bound = chalk_rust_ir::AdtDatumBound {
|
||||||
fields: Vec::new(), // FIXME add fields (only relevant for auto traits)
|
fields: Vec::new(), // FIXME add fields (only relevant for auto traits)
|
||||||
where_clauses,
|
where_clauses,
|
||||||
};
|
};
|
||||||
@ -1153,7 +1182,7 @@ fn from(struct_id: StructId) -> Self {
|
|||||||
|
|
||||||
impl From<crate::TypeCtorId> for StructId {
|
impl From<crate::TypeCtorId> for StructId {
|
||||||
fn from(type_ctor_id: crate::TypeCtorId) -> Self {
|
fn from(type_ctor_id: crate::TypeCtorId) -> Self {
|
||||||
chalk_ir::StructId(type_ctor_id.as_intern_id())
|
chalk_ir::AdtId(type_ctor_id.as_intern_id())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
//! Implementation of Chalk debug helper functions using TLS.
|
//! Implementation of Chalk debug helper functions using TLS.
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
|
||||||
use chalk_ir::{AliasTy, Goal, Goals, Lifetime, Parameter, ProgramClauseImplication, TypeName};
|
use chalk_ir::{AliasTy, GenericArg, Goal, Goals, Lifetime, ProgramClauseImplication, TypeName};
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
|
|
||||||
use super::{from_chalk, Interner};
|
use super::{from_chalk, Interner};
|
||||||
@ -18,7 +18,7 @@ pub fn debug_struct_id(
|
|||||||
id: super::StructId,
|
id: super::StructId,
|
||||||
f: &mut fmt::Formatter<'_>,
|
f: &mut fmt::Formatter<'_>,
|
||||||
) -> Result<(), fmt::Error> {
|
) -> Result<(), fmt::Error> {
|
||||||
let type_ctor: TypeCtor = from_chalk(self.0, TypeName::Struct(id));
|
let type_ctor: TypeCtor = from_chalk(self.0, TypeName::Adt(id));
|
||||||
match type_ctor {
|
match type_ctor {
|
||||||
TypeCtor::Bool => write!(f, "bool")?,
|
TypeCtor::Bool => write!(f, "bool")?,
|
||||||
TypeCtor::Char => write!(f, "char")?,
|
TypeCtor::Char => write!(f, "char")?,
|
||||||
@ -188,9 +188,9 @@ pub fn debug_lifetime(
|
|||||||
write!(fmt, "{:?}", lifetime.data(&Interner))
|
write!(fmt, "{:?}", lifetime.data(&Interner))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn debug_parameter(
|
pub fn debug_generic_arg(
|
||||||
&self,
|
&self,
|
||||||
parameter: &Parameter<Interner>,
|
parameter: &GenericArg<Interner>,
|
||||||
fmt: &mut fmt::Formatter<'_>,
|
fmt: &mut fmt::Formatter<'_>,
|
||||||
) -> Result<(), fmt::Error> {
|
) -> Result<(), fmt::Error> {
|
||||||
write!(fmt, "{:?}", parameter.data(&Interner).inner_debug())
|
write!(fmt, "{:?}", parameter.data(&Interner).inner_debug())
|
||||||
|
Loading…
Reference in New Issue
Block a user