@@ -175,17 +175,21 @@ macro_rules! setup_tracked_fn {
175175 impl $Configuration {
176176 fn fn_ingredient( db: & dyn $Db) -> & $zalsa:: function:: IngredientImpl <$Configuration> {
177177 let zalsa = db. zalsa( ) ;
178+ Self :: fn_ingredient_( db, zalsa)
179+ }
178180
181+ #[ inline]
182+ fn fn_ingredient_<' z>( db: & dyn $Db, zalsa: & ' z $zalsa:: Zalsa ) -> & ' z $zalsa:: function:: IngredientImpl <$Configuration> {
179183 // SAFETY: `lookup_jar_by_type` returns a valid ingredient index, and the first
180184 // ingredient created by our jar is the function ingredient.
181185 unsafe {
182186 $FN_CACHE. get_or_create( zalsa, || zalsa. lookup_jar_by_type:: <$fn_name>( ) )
183187 }
184- . get_or_init( || <dyn $Db as $Db>:: zalsa_register_downcaster ( db) )
188+ . get_or_init( || * <dyn $Db as $Db>:: zalsa_register_upcaster ( db) )
185189 }
186190
187191 pub fn fn_ingredient_mut( db: & mut dyn $Db) -> & mut $zalsa:: function:: IngredientImpl <Self > {
188- let view = <dyn $Db as $Db>:: zalsa_register_downcaster ( db) ;
192+ let view = * <dyn $Db as $Db>:: zalsa_register_upcaster ( db) ;
189193 let zalsa_mut = db. zalsa_mut( ) ;
190194 let index = zalsa_mut. lookup_jar_by_type:: <$fn_name>( ) ;
191195 let ( ingredient, _) = zalsa_mut. lookup_ingredient_mut( index) ;
@@ -199,7 +203,13 @@ macro_rules! setup_tracked_fn {
199203 db: & dyn $Db,
200204 ) -> & $zalsa:: interned:: IngredientImpl <$Configuration> {
201205 let zalsa = db. zalsa( ) ;
202-
206+ Self :: intern_ingredient_( db, zalsa)
207+ }
208+ #[ inline]
209+ fn intern_ingredient_<' z>(
210+ db: & dyn $Db,
211+ zalsa: & ' z $zalsa:: Zalsa
212+ ) -> & ' z $zalsa:: interned:: IngredientImpl <$Configuration> {
203213 // SAFETY: `lookup_jar_by_type` returns a valid ingredient index, and the second
204214 // ingredient created by our jar is the interned ingredient (given `needs_interner`).
205215 unsafe {
@@ -258,11 +268,12 @@ macro_rules! setup_tracked_fn {
258268 }
259269
260270 fn id_to_input<$db_lt>( db: & $db_lt Self :: DbView , key: salsa:: Id ) -> Self :: Input <$db_lt> {
271+ let zalsa = db. zalsa( ) ;
261272 $zalsa:: macro_if! {
262273 if $needs_interner {
263- $Configuration:: intern_ingredient ( db) . data( db . as_dyn_database ( ) , key) . clone( )
274+ $Configuration:: intern_ingredient_ ( db, zalsa ) . data( zalsa , key) . clone( )
264275 } else {
265- $zalsa:: FromIdWithDb :: from_id( key, db . zalsa( ) )
276+ $zalsa:: FromIdWithDb :: from_id( key, zalsa)
266277 }
267278 }
268279 }
@@ -309,6 +320,7 @@ macro_rules! setup_tracked_fn {
309320 } ;
310321
311322 let fn_ingredient = <$zalsa:: function:: IngredientImpl <$Configuration>>:: new(
323+ zalsa,
312324 first_index,
313325 memo_ingredient_indices,
314326 $lru,
@@ -340,9 +352,10 @@ macro_rules! setup_tracked_fn {
340352 ) -> Vec <& $db_lt A > {
341353 use salsa:: plumbing as $zalsa;
342354 let key = $zalsa:: macro_if! {
343- if $needs_interner {
344- $Configuration:: intern_ingredient( $db) . intern_id( $db. as_dyn_database( ) , ( $( $input_id) ,* ) , |_, data| data)
345- } else {
355+ if $needs_interner { {
356+ let ( zalsa, zalsa_local) = $db. zalsas( ) ;
357+ $Configuration:: intern_ingredient( $db) . intern_id( zalsa, zalsa_local, ( $( $input_id) ,* ) , |_, data| data)
358+ } } else {
346359 $zalsa:: AsId :: as_id( & ( $( $input_id) ,* ) )
347360 }
348361 } ;
@@ -383,11 +396,15 @@ macro_rules! setup_tracked_fn {
383396 let result = $zalsa:: macro_if! {
384397 if $needs_interner {
385398 {
386- let key = $Configuration:: intern_ingredient( $db) . intern_id( $db. as_dyn_database( ) , ( $( $input_id) ,* ) , |_, data| data) ;
387- $Configuration:: fn_ingredient( $db) . fetch( $db, key)
399+ let ( zalsa, zalsa_local) = $db. zalsas( ) ;
400+ let key = $Configuration:: intern_ingredient_( $db, zalsa) . intern_id( zalsa, zalsa_local, ( $( $input_id) ,* ) , |_, data| data) ;
401+ $Configuration:: fn_ingredient_( $db, zalsa) . fetch( $db, zalsa, zalsa_local, key)
388402 }
389403 } else {
390- $Configuration:: fn_ingredient( $db) . fetch( $db, $zalsa:: AsId :: as_id( & ( $( $input_id) ,* ) ) )
404+ {
405+ let ( zalsa, zalsa_local) = $db. zalsas( ) ;
406+ $Configuration:: fn_ingredient_( $db, zalsa) . fetch( $db, zalsa, zalsa_local, $zalsa:: AsId :: as_id( & ( $( $input_id) ,* ) ) )
407+ }
391408 }
392409 } ;
393410
0 commit comments