@@ -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_downcaster( 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_downcaster( 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,12 @@ macro_rules! setup_tracked_fn {
199203 db: & dyn $Db,
200204 ) -> & $zalsa:: interned:: IngredientImpl <$Configuration> {
201205 let zalsa = db. zalsa( ) ;
202-
206+ Self :: intern_ingredient_( zalsa)
207+ }
208+ #[ inline]
209+ fn intern_ingredient_<' z>(
210+ zalsa: & ' z $zalsa:: Zalsa
211+ ) -> & ' z $zalsa:: interned:: IngredientImpl <$Configuration> {
203212 // SAFETY: `lookup_jar_by_type` returns a valid ingredient index, and the second
204213 // ingredient created by our jar is the interned ingredient (given `needs_interner`).
205214 unsafe {
@@ -257,12 +266,12 @@ macro_rules! setup_tracked_fn {
257266 $( $cycle_recovery_fn) * ( db, value, count, $( $input_id) ,* )
258267 }
259268
260- fn id_to_input<$db_lt>( db : & $db_lt Self :: DbView , key: salsa:: Id ) -> Self :: Input <$db_lt> {
269+ fn id_to_input<$db_lt>( zalsa : & $db_lt $zalsa :: Zalsa , key: salsa:: Id ) -> Self :: Input <$db_lt> {
261270 $zalsa:: macro_if! {
262271 if $needs_interner {
263- $Configuration:: intern_ingredient ( db ) . data( db . as_dyn_database ( ) , key) . clone( )
272+ $Configuration:: intern_ingredient_ ( zalsa ) . data( zalsa , key) . clone( )
264273 } else {
265- $zalsa:: FromIdWithDb :: from_id( key, db . zalsa( ) )
274+ $zalsa:: FromIdWithDb :: from_id( key, zalsa)
266275 }
267276 }
268277 }
@@ -340,9 +349,10 @@ macro_rules! setup_tracked_fn {
340349 ) -> Vec <& $db_lt A > {
341350 use salsa:: plumbing as $zalsa;
342351 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 {
352+ if $needs_interner { {
353+ let ( zalsa, zalsa_local) = $db. zalsas( ) ;
354+ $Configuration:: intern_ingredient( $db) . intern_id( zalsa, zalsa_local, ( $( $input_id) ,* ) , |_, data| data)
355+ } } else {
346356 $zalsa:: AsId :: as_id( & ( $( $input_id) ,* ) )
347357 }
348358 } ;
@@ -380,14 +390,17 @@ macro_rules! setup_tracked_fn {
380390 }
381391
382392 $zalsa:: attach( $db, || {
393+ let ( zalsa, zalsa_local) = $db. zalsas( ) ;
383394 let result = $zalsa:: macro_if! {
384395 if $needs_interner {
385396 {
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)
397+ let key = $Configuration:: intern_ingredient_ ( zalsa ) . intern_id( zalsa , zalsa_local , ( $( $input_id) ,* ) , |_, data| data) ;
398+ $Configuration:: fn_ingredient_ ( $db, zalsa ) . fetch( $db, zalsa , zalsa_local , key)
388399 }
389400 } else {
390- $Configuration:: fn_ingredient( $db) . fetch( $db, $zalsa:: AsId :: as_id( & ( $( $input_id) ,* ) ) )
401+ {
402+ $Configuration:: fn_ingredient_( $db, zalsa) . fetch( $db, zalsa, zalsa_local, $zalsa:: AsId :: as_id( & ( $( $input_id) ,* ) ) )
403+ }
391404 }
392405 } ;
393406
0 commit comments