File tree Expand file tree Collapse file tree 1 file changed +16
-0
lines changed
rust/ql/lib/codeql/rust/internal/typeinference Expand file tree Collapse file tree 1 file changed +16
-0
lines changed Original file line number Diff line number Diff line change @@ -589,7 +589,23 @@ final class ImplTypeAbstraction extends TypeAbstraction, Impl {
589589 }
590590}
591591
592+ private predicate idDynTraitTypeRepr ( @dyn_trait_type_repr x , @dyn_trait_type_repr y ) { x = y }
593+
594+ private predicate idOfDynTraitTypeRepr ( @dyn_trait_type_repr x , int y ) =
595+ equivalenceRelation( idDynTraitTypeRepr / 2 ) ( x , y )
596+
597+ private int idOfDynTraitTypeRepr ( DynTraitTypeRepr node ) {
598+ idOfDynTraitTypeRepr ( Synth:: convertAstNodeToRaw ( node ) , result )
599+ }
600+
601+ /** Holds if `dt` is the canonical dyn trait type abstraction for `trait`. */
602+ private predicate canonicalDynTraitTypeAbstraction ( DynTraitTypeRepr dt , Trait trait ) {
603+ dt = min ( DynTraitTypeRepr d | d .getTrait ( ) = trait | d order by idOfDynTraitTypeRepr ( d ) )
604+ }
605+
592606final class DynTypeAbstraction extends TypeAbstraction , DynTraitTypeRepr {
607+ DynTypeAbstraction ( ) { canonicalDynTraitTypeAbstraction ( this , this .getTrait ( ) ) }
608+
593609 override TypeParameter getATypeParameter ( ) {
594610 result = any ( DynTraitTypeParameter tp | tp .getTrait ( ) = this .getTrait ( ) ) .getTraitTypeParameter ( )
595611 }
You can’t perform that action at this time.
0 commit comments