Skip to content

Commit 203d5dd

Browse files
bors[bot]matklad
andcommitted
Merge #1443
1443: cache chalk queries r=flodiebold a=matklad This gives a significant speedup, because chalk will call these functions several times even withing a single revision. The only significant one here is `impl_data`, but I figured it might be good to cache others just for consistency. The results I get are: Before: from scratch: 16.081457952s no change: 15.846493ms trivial change: 352.95592ms comment change: 361.998408ms const change: 457.629212ms After: from scratch: 14.910610278s no change: 14.934647ms trivial change: 85.633023ms comment change: 96.433023ms const change: 171.543296ms Seems like a nice win! Co-authored-by: Aleksey Kladov <[email protected]>
2 parents 0cff7f8 + a198d78 commit 203d5dd

File tree

3 files changed

+240
-194
lines changed

3 files changed

+240
-194
lines changed

crates/ra_hir/src/db.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,26 @@ pub trait HirDatabase: DefDatabase + AstDatabase {
181181
#[salsa::volatile]
182182
fn solver(&self, krate: Crate) -> Arc<Mutex<crate::ty::traits::Solver>>;
183183

184+
#[salsa::invoke(crate::ty::traits::chalk::associated_ty_data_query)]
185+
fn associated_ty_data(&self, id: chalk_ir::TypeId) -> Arc<chalk_rust_ir::AssociatedTyDatum>;
186+
187+
#[salsa::invoke(crate::ty::traits::chalk::trait_datum_query)]
188+
fn trait_datum(
189+
&self,
190+
krate: Crate,
191+
trait_id: chalk_ir::TraitId,
192+
) -> Arc<chalk_rust_ir::TraitDatum>;
193+
194+
#[salsa::invoke(crate::ty::traits::chalk::struct_datum_query)]
195+
fn struct_datum(
196+
&self,
197+
krate: Crate,
198+
struct_id: chalk_ir::StructId,
199+
) -> Arc<chalk_rust_ir::StructDatum>;
200+
201+
#[salsa::invoke(crate::ty::traits::chalk::impl_datum_query)]
202+
fn impl_datum(&self, krate: Crate, impl_id: chalk_ir::ImplId) -> Arc<chalk_rust_ir::ImplDatum>;
203+
184204
#[salsa::invoke(crate::ty::traits::implements_query)]
185205
fn implements(
186206
&self,

crates/ra_hir/src/ty/traits.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use super::{TraitRef, Ty, Canonical, ProjectionTy};
1212

1313
use self::chalk::{ToChalk, from_chalk};
1414

15-
mod chalk;
15+
pub(crate) mod chalk;
1616

1717
pub(crate) type Solver = chalk_solve::Solver;
1818

0 commit comments

Comments
 (0)