@@ -229,62 +229,8 @@ pub struct GenericParamsData<'db> {
229
229
pub resolver_data : Arc < ResolverData < ' db > > ,
230
230
}
231
231
232
- // --- Selectors ---
233
-
234
- /// Implementation of [GenericsSemantic::generic_param_semantic].
235
- fn generic_param_semantic < ' db > (
236
- db : & ' db dyn Database ,
237
- generic_param_id : GenericParamId < ' db > ,
238
- ) -> Maybe < GenericParam < ' db > > {
239
- db. priv_generic_param_data ( generic_param_id, false ) ?. generic_param
240
- }
241
-
242
- /// Query implementation of [GenericsSemantic::generic_param_semantic].
243
- #[ salsa:: tracked]
244
- fn generic_param_semantic_tracked < ' db > (
245
- db : & ' db dyn Database ,
246
- generic_param_id : GenericParamId < ' db > ,
247
- ) -> Maybe < GenericParam < ' db > > {
248
- generic_param_semantic ( db, generic_param_id)
249
- }
250
-
251
- /// Implementation of [GenericsSemantic::generic_param_diagnostics].
252
- fn generic_param_diagnostics < ' db > (
253
- db : & ' db dyn Database ,
254
- generic_param_id : GenericParamId < ' db > ,
255
- ) -> Diagnostics < ' db , SemanticDiagnostic < ' db > > {
256
- db. priv_generic_param_data ( generic_param_id, false )
257
- . map ( |data| data. diagnostics )
258
- . unwrap_or_default ( )
259
- }
260
-
261
- /// Query implementation of [GenericsSemantic::generic_param_diagnostics].
262
- #[ salsa:: tracked]
263
- fn generic_param_diagnostics_tracked < ' db > (
264
- db : & ' db dyn Database ,
265
- generic_param_id : GenericParamId < ' db > ,
266
- ) -> Diagnostics < ' db , SemanticDiagnostic < ' db > > {
267
- generic_param_diagnostics ( db, generic_param_id)
268
- }
269
-
270
- /// Implementation of [GenericsSemantic::generic_param_resolver_data].
271
- fn generic_param_resolver_data < ' db > (
272
- db : & ' db dyn Database ,
273
- generic_param_id : GenericParamId < ' db > ,
274
- ) -> Maybe < Arc < ResolverData < ' db > > > {
275
- Ok ( db. priv_generic_param_data ( generic_param_id, false ) ?. resolver_data )
276
- }
277
-
278
- /// Query implementation of [GenericsSemantic::generic_param_resolver_data].
232
+ /// Query implementation of [GenericsSemantic::generic_impl_param_trait].
279
233
#[ salsa:: tracked]
280
- fn generic_param_resolver_data_tracked < ' db > (
281
- db : & ' db dyn Database ,
282
- generic_param_id : GenericParamId < ' db > ,
283
- ) -> Maybe < Arc < ResolverData < ' db > > > {
284
- generic_param_resolver_data ( db, generic_param_id)
285
- }
286
-
287
- /// Implementation of [GenericsSemantic::generic_impl_param_trait].
288
234
fn generic_impl_param_trait < ' db > (
289
235
db : & ' db dyn Database ,
290
236
generic_param_id : GenericParamId < ' db > ,
@@ -322,28 +268,10 @@ fn generic_impl_param_trait<'db>(
322
268
resolve_trait_path ( db, & mut diagnostics, & mut resolver, & trait_path_syntax)
323
269
}
324
270
325
- /// Query implementation of [GenericsSemantic::generic_impl_param_trait].
326
- #[ salsa:: tracked]
327
- fn generic_impl_param_trait_tracked < ' db > (
328
- db : & ' db dyn Database ,
329
- generic_param_id : GenericParamId < ' db > ,
330
- ) -> Maybe < TraitId < ' db > > {
331
- generic_impl_param_trait ( db, generic_param_id)
332
- }
333
-
334
- /// Implementation of
271
+ /// Query implementation of
335
272
/// [GenericsSemantic::generic_impl_param_shallow_trait_generic_args].
336
- fn generic_impl_param_shallow_trait_generic_args < ' db > (
337
- db : & ' db dyn Database ,
338
- impl_def_id : GenericParamId < ' db > ,
339
- ) -> Maybe < & ' db [ ( GenericParamId < ' db > , ShallowGenericArg < ' db > ) ] > {
340
- Ok ( generic_impl_param_shallow_trait_generic_args_helper ( db, impl_def_id) . maybe_as_ref ( ) ?)
341
- }
342
-
343
- /// Helper for [generic_impl_param_shallow_trait_generic_args]
344
- /// The actual query implementation, separated to allow returning a reference.
345
273
#[ salsa:: tracked( returns( ref) ) ]
346
- fn generic_impl_param_shallow_trait_generic_args_helper < ' db > (
274
+ fn generic_impl_param_shallow_trait_generic_args < ' db > (
347
275
db : & ' db dyn Database ,
348
276
generic_param_id : GenericParamId < ' db > ,
349
277
) -> Maybe < Vec < ( GenericParamId < ' db > , ShallowGenericArg < ' db > ) > > {
@@ -447,10 +375,9 @@ fn generic_impl_param_shallow_trait_generic_args_helper<'db>(
447
375
}
448
376
}
449
377
450
- // --- Computation ---
451
-
452
- /// Implementation of [GenericsSemantic::priv_generic_param_data].
453
- fn priv_generic_param_data < ' db > (
378
+ /// Returns data about a generic param.
379
+ #[ salsa:: tracked( cycle_result=generic_param_data_cycle, returns( ref) ) ]
380
+ fn generic_param_data < ' db > (
454
381
db : & ' db dyn Database ,
455
382
generic_param_id : GenericParamId < ' db > ,
456
383
in_cycle : bool ,
@@ -519,28 +446,20 @@ fn priv_generic_param_data<'db>(
519
446
} )
520
447
}
521
448
522
- /// Query implementation of [GenericsSemantic::priv_generic_param_data].
523
- #[ salsa:: tracked( cycle_result=priv_generic_param_data_cycle) ]
524
- fn priv_generic_param_data_tracked < ' db > (
525
- db : & ' db dyn Database ,
526
- generic_param_id : GenericParamId < ' db > ,
527
- in_cycle : bool ,
528
- ) -> Maybe < GenericParamData < ' db > > {
529
- priv_generic_param_data ( db, generic_param_id, in_cycle)
530
- }
531
-
532
- /// Cycle handling for [GenericsSemantic::priv_generic_param_data].
533
- fn priv_generic_param_data_cycle < ' db > (
449
+ /// Cycle handling for [generic_param_data].
450
+ fn generic_param_data_cycle < ' db > (
534
451
db : & ' db dyn Database ,
535
452
generic_param_id : GenericParamId < ' db > ,
536
453
_in_cycle : bool ,
537
454
) -> Maybe < GenericParamData < ' db > > {
538
- priv_generic_param_data ( db, generic_param_id, true )
455
+ generic_param_data ( db, generic_param_id, true ) . clone ( )
539
456
}
540
457
541
- /// Implementation of [GenericsSemantic::generic_params_type_constraints].
458
+ /// Query implementation of [GenericsSemantic::generic_params_type_constraints].
459
+ #[ salsa:: tracked( returns( ref) ) ]
542
460
fn generic_params_type_constraints < ' db > (
543
461
db : & ' db dyn Database ,
462
+ _tracked : Tracked ,
544
463
generic_params : Vec < GenericParamId < ' db > > ,
545
464
) -> Vec < ( TypeId < ' db > , TypeId < ' db > ) > {
546
465
let mut constraints = vec ! [ ] ;
@@ -573,23 +492,6 @@ fn generic_params_type_constraints<'db>(
573
492
constraints
574
493
}
575
494
576
- /// Query implementation of [GenericsSemantic::generic_params_type_constraints].
577
- fn generic_params_type_constraints_tracked < ' db > (
578
- db : & ' db dyn Database ,
579
- generic_params : Vec < GenericParamId < ' db > > ,
580
- ) -> Vec < ( TypeId < ' db > , TypeId < ' db > ) > {
581
- generic_params_type_constraints_helper ( db, ( ) , generic_params)
582
- }
583
-
584
- #[ salsa:: tracked]
585
- fn generic_params_type_constraints_helper < ' db > (
586
- db : & ' db dyn Database ,
587
- _tracked : Tracked ,
588
- generic_params : Vec < GenericParamId < ' db > > ,
589
- ) -> Vec < ( TypeId < ' db > , TypeId < ' db > ) > {
590
- generic_params_type_constraints ( db, generic_params)
591
- }
592
-
593
495
// --- Helpers ---
594
496
595
497
/// Returns the generic parameters list AST node of a generic parameter.
@@ -633,15 +535,11 @@ pub fn semantic_generic_params_ex<'db>(
633
535
. filter_map ( |param_syntax| {
634
536
let generic_param_id =
635
537
GenericParamLongId ( module_file_id, param_syntax. stable_ptr ( db) ) . intern ( db) ;
636
- let generic_param_data =
637
- db. priv_generic_param_data ( generic_param_id, in_cycle) . ok ( ) ?;
638
- let generic_param = generic_param_data. generic_param ;
639
- diagnostics. extend ( generic_param_data. diagnostics ) ;
538
+ let data = generic_param_data ( db, generic_param_id, in_cycle) . as_ref ( ) . ok ( ) ?;
539
+ let generic_param = data. generic_param . clone ( ) ;
540
+ diagnostics. extend ( data. diagnostics . clone ( ) ) ;
640
541
resolver. add_generic_param ( generic_param_id) ;
641
- resolver
642
- . data
643
- . used_uses
644
- . extend ( generic_param_data. resolver_data . used_uses . iter ( ) . copied ( ) ) ;
542
+ resolver. data . used_uses . extend ( data. resolver_data . used_uses . iter ( ) . copied ( ) ) ;
645
543
generic_param. ok ( )
646
544
} )
647
545
. collect ( ) ,
@@ -849,51 +747,53 @@ pub trait GenericsSemantic<'db>: Database {
849
747
& ' db self ,
850
748
generic_param : GenericParamId < ' db > ,
851
749
) -> Maybe < GenericParam < ' db > > {
852
- generic_param_semantic_tracked ( self . as_dyn_database ( ) , generic_param)
750
+ generic_param_data ( self . as_dyn_database ( ) , generic_param, false )
751
+ . maybe_as_ref ( ) ?
752
+ . generic_param
753
+ . clone ( )
853
754
}
854
755
/// Returns the semantic diagnostics of a generic param.
855
756
fn generic_param_diagnostics (
856
757
& ' db self ,
857
758
generic_param : GenericParamId < ' db > ,
858
759
) -> Diagnostics < ' db , SemanticDiagnostic < ' db > > {
859
- generic_param_diagnostics_tracked ( self . as_dyn_database ( ) , generic_param)
760
+ generic_param_data ( self . as_dyn_database ( ) , generic_param, false )
761
+ . as_ref ( )
762
+ . map ( |data| data. diagnostics . clone ( ) )
763
+ . unwrap_or_default ( )
860
764
}
861
765
/// Returns the resolver data of a generic param.
862
766
fn generic_param_resolver_data (
863
767
& ' db self ,
864
768
generic_param : GenericParamId < ' db > ,
865
769
) -> Maybe < Arc < ResolverData < ' db > > > {
866
- generic_param_resolver_data_tracked ( self . as_dyn_database ( ) , generic_param)
770
+ Ok ( generic_param_data ( self . as_dyn_database ( ) , generic_param, false )
771
+ . maybe_as_ref ( ) ?
772
+ . resolver_data
773
+ . clone ( ) )
867
774
}
868
775
/// Returns the trait a generic param impl should implement.
869
776
/// Panics if the generic param is not an impl generic param.
870
777
fn generic_impl_param_trait (
871
778
& ' db self ,
872
779
generic_param_id : GenericParamId < ' db > ,
873
780
) -> Maybe < TraitId < ' db > > {
874
- generic_impl_param_trait_tracked ( self . as_dyn_database ( ) , generic_param_id)
781
+ generic_impl_param_trait ( self . as_dyn_database ( ) , generic_param_id)
875
782
}
876
783
/// Returns the shallow generic args of a generic impl param.
877
784
fn generic_impl_param_shallow_trait_generic_args (
878
785
& ' db self ,
879
786
generic_param : GenericParamId < ' db > ,
880
787
) -> Maybe < & ' db [ ( GenericParamId < ' db > , ShallowGenericArg < ' db > ) ] > {
881
- generic_impl_param_shallow_trait_generic_args ( self . as_dyn_database ( ) , generic_param)
882
- }
883
- /// Private query to compute data about a generic param.
884
- fn priv_generic_param_data (
885
- & ' db self ,
886
- generic_param : GenericParamId < ' db > ,
887
- in_cycle : bool ,
888
- ) -> Maybe < GenericParamData < ' db > > {
889
- priv_generic_param_data_tracked ( self . as_dyn_database ( ) , generic_param, in_cycle)
788
+ Ok ( generic_impl_param_shallow_trait_generic_args ( self . as_dyn_database ( ) , generic_param)
789
+ . maybe_as_ref ( ) ?)
890
790
}
891
791
/// Returns the type constraints introduced by the generic params.
892
792
fn generic_params_type_constraints (
893
793
& ' db self ,
894
794
generic_params : Vec < GenericParamId < ' db > > ,
895
- ) -> Vec < ( TypeId < ' db > , TypeId < ' db > ) > {
896
- generic_params_type_constraints_tracked ( self . as_dyn_database ( ) , generic_params)
795
+ ) -> & ' db [ ( TypeId < ' db > , TypeId < ' db > ) ] {
796
+ generic_params_type_constraints ( self . as_dyn_database ( ) , ( ) , generic_params)
897
797
}
898
798
}
899
799
impl < ' db , T : Database + ?Sized > GenericsSemantic < ' db > for T { }
0 commit comments