[[package]]
name = "chalk-derive"
version = "0.1.0"
-source = "git+https://github.com/rust-lang/chalk.git?rev=039fc904a05f8cb3d0c682c9a57a63dda7a35356#039fc904a05f8cb3d0c682c9a57a63dda7a35356"
+source = "git+https://github.com/rust-lang/chalk.git?rev=6222e416b96892b2a86bc08de7dbc9826ff1acea#6222e416b96892b2a86bc08de7dbc9826ff1acea"
dependencies = [
"proc-macro2",
"quote",
"syn",
+ "synstructure",
]
[[package]]
name = "chalk-engine"
version = "0.9.0"
-source = "git+https://github.com/rust-lang/chalk.git?rev=039fc904a05f8cb3d0c682c9a57a63dda7a35356#039fc904a05f8cb3d0c682c9a57a63dda7a35356"
+source = "git+https://github.com/rust-lang/chalk.git?rev=6222e416b96892b2a86bc08de7dbc9826ff1acea#6222e416b96892b2a86bc08de7dbc9826ff1acea"
dependencies = [
"chalk-macros",
"rustc-hash",
[[package]]
name = "chalk-ir"
version = "0.1.0"
-source = "git+https://github.com/rust-lang/chalk.git?rev=039fc904a05f8cb3d0c682c9a57a63dda7a35356#039fc904a05f8cb3d0c682c9a57a63dda7a35356"
+source = "git+https://github.com/rust-lang/chalk.git?rev=6222e416b96892b2a86bc08de7dbc9826ff1acea#6222e416b96892b2a86bc08de7dbc9826ff1acea"
dependencies = [
"chalk-derive",
"chalk-engine",
[[package]]
name = "chalk-macros"
version = "0.1.1"
-source = "git+https://github.com/rust-lang/chalk.git?rev=039fc904a05f8cb3d0c682c9a57a63dda7a35356#039fc904a05f8cb3d0c682c9a57a63dda7a35356"
+source = "git+https://github.com/rust-lang/chalk.git?rev=6222e416b96892b2a86bc08de7dbc9826ff1acea#6222e416b96892b2a86bc08de7dbc9826ff1acea"
dependencies = [
"lazy_static",
]
[[package]]
name = "chalk-rust-ir"
version = "0.1.0"
-source = "git+https://github.com/rust-lang/chalk.git?rev=039fc904a05f8cb3d0c682c9a57a63dda7a35356#039fc904a05f8cb3d0c682c9a57a63dda7a35356"
+source = "git+https://github.com/rust-lang/chalk.git?rev=6222e416b96892b2a86bc08de7dbc9826ff1acea#6222e416b96892b2a86bc08de7dbc9826ff1acea"
dependencies = [
"chalk-derive",
"chalk-engine",
[[package]]
name = "chalk-solve"
version = "0.1.0"
-source = "git+https://github.com/rust-lang/chalk.git?rev=039fc904a05f8cb3d0c682c9a57a63dda7a35356#039fc904a05f8cb3d0c682c9a57a63dda7a35356"
+source = "git+https://github.com/rust-lang/chalk.git?rev=6222e416b96892b2a86bc08de7dbc9826ff1acea#6222e416b96892b2a86bc08de7dbc9826ff1acea"
dependencies = [
"chalk-derive",
"chalk-engine",
"unicode-xid",
]
+[[package]]
+name = "synstructure"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "unicode-xid",
+]
+
[[package]]
name = "tempfile"
version = "3.1.0"
type InternedGoal = Arc<GoalData<Self>>;
type InternedGoals = Vec<Goal<Self>>;
type InternedSubstitution = Vec<Parameter<Self>>;
+ type InternedProgramClause = chalk_ir::ProgramClauseData<Self>;
+ type InternedProgramClauses = Vec<chalk_ir::ProgramClause<Self>>;
+ type InternedQuantifiedWhereClauses = Vec<chalk_ir::QuantifiedWhereClause<Self>>;
type Identifier = TypeAliasId;
type DefId = InternId;
) -> &'a [Parameter<Self>] {
substitution
}
+
+ fn intern_program_clause(
+ &self,
+ data: chalk_ir::ProgramClauseData<Self>,
+ ) -> chalk_ir::ProgramClauseData<Self> {
+ data
+ }
+
+ fn program_clause_data<'a>(
+ &self,
+ clause: &'a chalk_ir::ProgramClauseData<Self>,
+ ) -> &'a chalk_ir::ProgramClauseData<Self> {
+ clause
+ }
+
+ fn intern_program_clauses(
+ &self,
+ data: impl IntoIterator<Item = chalk_ir::ProgramClause<Self>>,
+ ) -> Vec<chalk_ir::ProgramClause<Self>> {
+ data.into_iter().collect()
+ }
+
+ fn program_clauses_data<'a>(
+ &self,
+ clauses: &'a Vec<chalk_ir::ProgramClause<Self>>,
+ ) -> &'a [chalk_ir::ProgramClause<Self>] {
+ clauses
+ }
+
+ fn intern_quantified_where_clauses(
+ &self,
+ data: impl IntoIterator<Item = chalk_ir::QuantifiedWhereClause<Self>>,
+ ) -> Self::InternedQuantifiedWhereClauses {
+ data.into_iter().collect()
+ }
+
+ fn quantified_where_clauses_data<'a>(
+ &self,
+ clauses: &'a Self::InternedQuantifiedWhereClauses,
+ ) -> &'a [chalk_ir::QuantifiedWhereClause<Self>] {
+ clauses
+ }
}
impl chalk_ir::interner::HasInterner for Interner {
Ty::Bound(idx) => chalk_ir::TyData::BoundVar(idx).intern(&Interner),
Ty::Infer(_infer_ty) => panic!("uncanonicalized infer ty"),
Ty::Dyn(predicates) => {
- let where_clauses = predicates
- .iter()
- .filter(|p| !p.is_error())
- .cloned()
- .map(|p| p.to_chalk(db))
- .collect();
+ let where_clauses = chalk_ir::QuantifiedWhereClauses::from(
+ &Interner,
+ predicates.iter().filter(|p| !p.is_error()).cloned().map(|p| p.to_chalk(db)),
+ );
let bounded_ty = chalk_ir::DynTy { bounds: make_binders(where_clauses, 1) };
chalk_ir::TyData::Dyn(bounded_ty).intern(&Interner)
}
chalk_ir::TyData::InferenceVar(_iv) => Ty::Unknown,
chalk_ir::TyData::Dyn(where_clauses) => {
assert_eq!(where_clauses.bounds.binders.len(), 1);
- let predicates =
- where_clauses.bounds.value.into_iter().map(|c| from_chalk(db, c)).collect();
+ let predicates = where_clauses
+ .bounds
+ .skip_binders()
+ .iter(&Interner)
+ .map(|c| from_chalk(db, c.clone()))
+ .collect();
Ty::Dyn(predicates)
}
}
) -> GenericPredicate {
// we don't produce any where clauses with binders and can't currently deal with them
match where_clause
- .value
+ .skip_binders()
.shifted_out(&Interner)
.expect("unexpected bound vars in where clause")
{
pred.clone().to_chalk(db).cast(&Interner);
clauses.push(program_clause.into_from_env_clause(&Interner));
}
- chalk_ir::Environment::new().add_clauses(clauses)
+ chalk_ir::Environment::new(&Interner).add_clauses(&Interner, clauses)
}
fn from_chalk(
}
fn make_binders<T>(value: T, num_vars: usize) -> chalk_ir::Binders<T> {
- chalk_ir::Binders {
+ chalk_ir::Binders::new(
+ std::iter::repeat(chalk_ir::ParameterKind::Ty(())).take(num_vars).collect(),
value,
- binders: std::iter::repeat(chalk_ir::ParameterKind::Ty(())).take(num_vars).collect(),
- }
+ )
}
fn convert_where_clauses(
fn interner(&self) -> &Interner {
&Interner
}
+ fn well_known_trait_id(
+ &self,
+ _well_known_trait: chalk_rust_ir::WellKnownTrait,
+ ) -> chalk_ir::TraitId<Interner> {
+ unimplemented!()
+ }
}
pub(crate) fn associated_ty_data_query(