@@ -16,10 +16,15 @@ newtype TType =
1616 TArrayType ( ) or // todo: add size?
1717 TRefType ( ) or // todo: add mut?
1818 TImplTraitType ( ImplTraitTypeRepr impl ) or
19+ TDynTraitType ( Trait t ) { t = any ( DynTraitTypeRepr dt ) .getTrait ( ) } or
1920 TSliceType ( ) or
2021 TTypeParamTypeParameter ( TypeParam t ) or
2122 TAssociatedTypeTypeParameter ( TypeAlias t ) { any ( TraitItemNode trait ) .getAnAssocItem ( ) = t } or
2223 TArrayTypeParameter ( ) or
24+ TDynTraitTypeParameter ( Trait t , TypeParam tp ) {
25+ t = any ( DynTraitTypeRepr dt ) .getTrait ( ) and
26+ tp = t .getGenericParamList ( ) .getAGenericParam ( )
27+ } or
2328 TRefTypeParameter ( ) or
2429 TSelfTypeParameter ( Trait t ) or
2530 TSliceTypeParameter ( )
@@ -226,6 +231,26 @@ class ImplTraitType extends Type, TImplTraitType {
226231 override Location getLocation ( ) { result = impl .getLocation ( ) }
227232}
228233
234+ class DynTraitType extends Type , TDynTraitType {
235+ Trait trait ;
236+
237+ DynTraitType ( ) { this = TDynTraitType ( trait ) }
238+
239+ override StructField getStructField ( string name ) { none ( ) }
240+
241+ override TupleField getTupleField ( int i ) { none ( ) }
242+
243+ override DynTraitTypeParameter getTypeParameter ( int i ) {
244+ result = TDynTraitTypeParameter ( trait , trait .getGenericParamList ( ) .getTypeParam ( i ) )
245+ }
246+
247+ Trait getTrait ( ) { result = trait }
248+
249+ override string toString ( ) { result = "dyn " + trait .getName ( ) .toString ( ) }
250+
251+ override Location getLocation ( ) { result = trait .getLocation ( ) }
252+ }
253+
229254/**
230255 * An [impl Trait in return position][1] type, for example:
231256 *
@@ -336,6 +361,23 @@ class ArrayTypeParameter extends TypeParameter, TArrayTypeParameter {
336361 override Location getLocation ( ) { result instanceof EmptyLocation }
337362}
338363
364+ class DynTraitTypeParameter extends TypeParameter , TDynTraitTypeParameter {
365+ private Trait trait ;
366+ private TypeParam typeParam ;
367+
368+ DynTraitTypeParameter ( ) { this = TDynTraitTypeParameter ( trait , typeParam ) }
369+
370+ Trait getTrait ( ) { result = trait }
371+
372+ TypeParam getTypeParam ( ) { result = typeParam }
373+
374+ override string toString ( ) {
375+ result = "dyn " + trait .getName ( ) .toString ( ) + "<" + typeParam .toString ( ) + ">"
376+ }
377+
378+ override Location getLocation ( ) { result = typeParam .getLocation ( ) }
379+ }
380+
339381/** An implicit reference type parameter. */
340382class RefTypeParameter extends TypeParameter , TRefTypeParameter {
341383 override string toString ( ) { result = "&T" }
@@ -420,6 +462,13 @@ final class ImplTypeAbstraction extends TypeAbstraction, Impl {
420462 }
421463}
422464
465+ final class DynTypeAbstraction extends TypeAbstraction , DynTraitTypeRepr {
466+ override TypeParameter getATypeParameter ( ) {
467+ result .( TypeParamTypeParameter ) .getTypeParam ( ) =
468+ this .getTrait ( ) .getGenericParamList ( ) .getATypeParam ( )
469+ }
470+ }
471+
423472final class TraitTypeAbstraction extends TypeAbstraction , Trait {
424473 override TypeParameter getATypeParameter ( ) {
425474 result .( TypeParamTypeParameter ) .getTypeParam ( ) = this .getGenericParamList ( ) .getATypeParam ( )
0 commit comments