aboutsummaryrefslogtreecommitdiff
path: root/crates/salsa/src
diff options
context:
space:
mode:
Diffstat (limited to 'crates/salsa/src')
-rw-r--r--crates/salsa/src/lib.rs20
1 files changed, 8 insertions, 12 deletions
diff --git a/crates/salsa/src/lib.rs b/crates/salsa/src/lib.rs
index 5de3c7774..75815e8bd 100644
--- a/crates/salsa/src/lib.rs
+++ b/crates/salsa/src/lib.rs
@@ -8,8 +8,8 @@ use std::{
8}; 8};
9use parking_lot::Mutex; 9use parking_lot::Mutex;
10 10
11type GroundQueryFn<T, D> = fn(&T, &D) -> (D, OutputFingerprint); 11type GroundQueryFn<T, D> = Box<Fn(&T, &D) -> (D, OutputFingerprint) + Send + Sync + 'static>;
12type QueryFn<T, D> = fn(&QueryCtx<T, D>, &D) -> (D, OutputFingerprint); 12type QueryFn<T, D> = Box<Fn(&QueryCtx<T, D>, &D) -> (D, OutputFingerprint) + Send + Sync + 'static>;
13 13
14#[derive(Debug)] 14#[derive(Debug)]
15pub struct Db<T, D> { 15pub struct Db<T, D> {
@@ -119,7 +119,7 @@ where
119 res 119 res
120 } 120 }
121 121
122 pub fn get_inner( 122 fn get_inner(
123 &self, 123 &self,
124 query_id: QueryId, 124 query_id: QueryId,
125 params: D, 125 params: D,
@@ -176,9 +176,9 @@ where
176 self.executed.borrow_mut().push(query_id.0); 176 self.executed.borrow_mut().push(query_id.0);
177 self.stack.borrow_mut().push(Vec::new()); 177 self.stack.borrow_mut().push(Vec::new());
178 178
179 let (res, output_fingerprint) = if let Some(f) = self.ground_query_fn_by_type(query_id.0) { 179 let (res, output_fingerprint) = if let Some(f) = self.query_config.ground_fn.get(&query_id.0) {
180 f(&self.db.ground_data, &params) 180 f(&self.db.ground_data, &params)
181 } else if let Some(f) = self.query_fn_by_type(query_id.0) { 181 } else if let Some(f) = self.query_config.query_fn.get(&query_id.0) {
182 f(self, &params) 182 f(self, &params)
183 } else { 183 } else {
184 panic!("unknown query type: {:?}", query_id.0); 184 panic!("unknown query type: {:?}", query_id.0);
@@ -190,12 +190,6 @@ where
190 self.db.record(query_id, params, res.clone(), output_fingerprint, deps); 190 self.db.record(query_id, params, res.clone(), output_fingerprint, deps);
191 (res, output_fingerprint) 191 (res, output_fingerprint)
192 } 192 }
193 fn ground_query_fn_by_type(&self, query_type: QueryTypeId) -> Option<GroundQueryFn<T, D>> {
194 self.query_config.ground_fn.get(&query_type).map(|&it| it)
195 }
196 fn query_fn_by_type(&self, query_type: QueryTypeId) -> Option<QueryFn<T, D>> {
197 self.query_config.query_fn.get(&query_type).map(|&it| it)
198 }
199 fn record_dep( 193 fn record_dep(
200 &self, 194 &self,
201 query_id: QueryId, 195 query_id: QueryId,
@@ -239,7 +233,9 @@ where
239 query_config: Arc::new(query_config), 233 query_config: Arc::new(query_config),
240 } 234 }
241 } 235 }
242 236 pub fn ground_data(&self) -> &T {
237 &self.db.ground_data
238 }
243 pub fn with_ground_data( 239 pub fn with_ground_data(
244 &self, 240 &self,
245 ground_data: T, 241 ground_data: T,