@@ -150,14 +150,18 @@ macro_rules! setup_tracked_fn {
150150 impl $Configuration {
151151 fn fn_ingredient( db: & dyn $Db) -> & $zalsa:: function:: IngredientImpl <$Configuration> {
152152 let zalsa = db. zalsa( ) ;
153+ Self :: fn_ingredient_( db, zalsa)
154+ }
155+
156+ fn fn_ingredient_<' z>( db: & dyn $Db, zalsa: & ' z $zalsa:: Zalsa ) -> & ' z $zalsa:: function:: IngredientImpl <$Configuration> {
153157 $FN_CACHE. get_or_create( zalsa, || {
154- <dyn $Db as $Db>:: zalsa_register_downcaster ( db) ;
158+ <dyn $Db as $Db>:: zalsa_register_upcaster ( db) ;
155159 zalsa. add_or_lookup_jar_by_type:: <$Configuration>( )
156160 } )
157161 }
158162
159163 pub fn fn_ingredient_mut( db: & mut dyn $Db) -> & mut $zalsa:: function:: IngredientImpl <Self > {
160- <dyn $Db as $Db>:: zalsa_register_downcaster ( db) ;
164+ <dyn $Db as $Db>:: zalsa_register_upcaster ( db) ;
161165 let zalsa_mut = db. zalsa_mut( ) ;
162166 let index = zalsa_mut. add_or_lookup_jar_by_type:: <$Configuration>( ) ;
163167 let ( ingredient, _) = zalsa_mut. lookup_ingredient_mut( index) ;
@@ -169,8 +173,14 @@ macro_rules! setup_tracked_fn {
169173 db: & dyn $Db,
170174 ) -> & $zalsa:: interned:: IngredientImpl <$Configuration> {
171175 let zalsa = db. zalsa( ) ;
176+ Self :: intern_ingredient_( db, zalsa)
177+ }
178+ fn intern_ingredient_<' z>(
179+ db: & dyn $Db,
180+ zalsa: & ' z $zalsa:: Zalsa
181+ ) -> & ' z $zalsa:: interned:: IngredientImpl <$Configuration> {
172182 $INTERN_CACHE. get_or_create( zalsa, || {
173- <dyn $Db as $Db>:: zalsa_register_downcaster ( db) ;
183+ <dyn $Db as $Db>:: zalsa_register_upcaster ( db) ;
174184 zalsa. add_or_lookup_jar_by_type:: <$Configuration>( ) . successor( 0 )
175185 } )
176186 }
@@ -218,11 +228,12 @@ macro_rules! setup_tracked_fn {
218228 }
219229
220230 fn id_to_input<$db_lt>( db: & $db_lt Self :: DbView , key: salsa:: Id ) -> Self :: Input <$db_lt> {
231+ let zalsa = db. zalsa( ) ;
221232 $zalsa:: macro_if! {
222233 if $needs_interner {
223- $Configuration:: intern_ingredient ( db) . data( db . as_dyn_database ( ) , key) . clone( )
234+ $Configuration:: intern_ingredient_ ( db, zalsa ) . data( zalsa , key) . clone( )
224235 } else {
225- $zalsa:: FromIdWithDb :: from_id( key, db . zalsa( ) )
236+ $zalsa:: FromIdWithDb :: from_id( key, zalsa)
226237 }
227238 }
228239 }
@@ -280,10 +291,10 @@ macro_rules! setup_tracked_fn {
280291 } ;
281292
282293 let fn_ingredient = <$zalsa:: function:: IngredientImpl <$Configuration>>:: new(
294+ zalsa,
283295 first_index,
284296 memo_ingredient_indices,
285297 $lru,
286- zalsa. views( ) . downcaster_for:: <dyn $Db>( ) ,
287298 ) ;
288299 $zalsa:: macro_if! {
289300 if $needs_interner {
@@ -312,9 +323,10 @@ macro_rules! setup_tracked_fn {
312323 ) -> Vec <& $db_lt A > {
313324 use salsa:: plumbing as $zalsa;
314325 let key = $zalsa:: macro_if! {
315- if $needs_interner {
316- $Configuration:: intern_ingredient( $db) . intern_id( $db. as_dyn_database( ) , ( $( $input_id) ,* ) , |_, data| data)
317- } else {
326+ if $needs_interner { {
327+ let ( zalsa, zalsa_local) = $db. zalsas( ) ;
328+ $Configuration:: intern_ingredient( $db) . intern_id( zalsa, zalsa_local, ( $( $input_id) ,* ) , |_, data| data)
329+ } } else {
318330 $zalsa:: AsId :: as_id( & ( $( $input_id) ,* ) )
319331 }
320332 } ;
@@ -355,11 +367,15 @@ macro_rules! setup_tracked_fn {
355367 let result = $zalsa:: macro_if! {
356368 if $needs_interner {
357369 {
358- let key = $Configuration:: intern_ingredient( $db) . intern_id( $db. as_dyn_database( ) , ( $( $input_id) ,* ) , |_, data| data) ;
359- $Configuration:: fn_ingredient( $db) . fetch( $db, key)
370+ let ( zalsa, zalsa_local) = $db. zalsas( ) ;
371+ let key = $Configuration:: intern_ingredient_( $db, zalsa) . intern_id( zalsa, zalsa_local, ( $( $input_id) ,* ) , |_, data| data) ;
372+ $Configuration:: fn_ingredient_( $db, zalsa) . fetch( $db, zalsa, zalsa_local, key)
360373 }
361374 } else {
362- $Configuration:: fn_ingredient( $db) . fetch( $db, $zalsa:: AsId :: as_id( & ( $( $input_id) ,* ) ) )
375+ {
376+ let ( zalsa, zalsa_local) = $db. zalsas( ) ;
377+ $Configuration:: fn_ingredient_( $db, zalsa) . fetch( $db, zalsa, zalsa_local, $zalsa:: AsId :: as_id( & ( $( $input_id) ,* ) ) )
378+ }
363379 }
364380 } ;
365381
0 commit comments