@@ -16,10 +16,14 @@ 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 ( TypeParam tp ) {
25+ tp = any ( DynTraitTypeRepr dt ) .getTrait ( ) .getGenericParamList ( ) .getAGenericParam ( )
26+ } or
2327 TRefTypeParameter ( ) or
2428 TSelfTypeParameter ( Trait t ) or
2529 TSliceTypeParameter ( )
@@ -226,6 +230,26 @@ class ImplTraitType extends Type, TImplTraitType {
226230 override Location getLocation ( ) { result = impl .getLocation ( ) }
227231}
228232
233+ class DynTraitType extends Type , TDynTraitType {
234+ Trait trait ;
235+
236+ DynTraitType ( ) { this = TDynTraitType ( trait ) }
237+
238+ override StructField getStructField ( string name ) { none ( ) }
239+
240+ override TupleField getTupleField ( int i ) { none ( ) }
241+
242+ override DynTraitTypeParameter getTypeParameter ( int i ) {
243+ result = TDynTraitTypeParameter ( trait .getGenericParamList ( ) .getTypeParam ( i ) )
244+ }
245+
246+ Trait getTrait ( ) { result = trait }
247+
248+ override string toString ( ) { result = "dyn " + trait .getName ( ) .toString ( ) }
249+
250+ override Location getLocation ( ) { result = trait .getLocation ( ) }
251+ }
252+
229253/**
230254 * An [impl Trait in return position][1] type, for example:
231255 *
@@ -336,6 +360,18 @@ class ArrayTypeParameter extends TypeParameter, TArrayTypeParameter {
336360 override Location getLocation ( ) { result instanceof EmptyLocation }
337361}
338362
363+ class DynTraitTypeParameter extends TypeParameter , TDynTraitTypeParameter {
364+ private TypeParam typeParam ;
365+
366+ DynTraitTypeParameter ( ) { this = TDynTraitTypeParameter ( typeParam ) }
367+
368+ TypeParam getTypeParam ( ) { result = typeParam }
369+
370+ override string toString ( ) { result = "dyn(" + typeParam .toString ( ) + ")" }
371+
372+ override Location getLocation ( ) { result = typeParam .getLocation ( ) }
373+ }
374+
339375/** An implicit reference type parameter. */
340376class RefTypeParameter extends TypeParameter , TRefTypeParameter {
341377 override string toString ( ) { result = "&T" }
@@ -420,6 +456,13 @@ final class ImplTypeAbstraction extends TypeAbstraction, Impl {
420456 }
421457}
422458
459+ final class DynTypeAbstraction extends TypeAbstraction , DynTraitTypeRepr {
460+ override TypeParameter getATypeParameter ( ) {
461+ result .( TypeParamTypeParameter ) .getTypeParam ( ) =
462+ this .getTrait ( ) .getGenericParamList ( ) .getATypeParam ( )
463+ }
464+ }
465+
423466final class TraitTypeAbstraction extends TypeAbstraction , Trait {
424467 override TypeParameter getATypeParameter ( ) {
425468 result .( TypeParamTypeParameter ) .getTypeParam ( ) = this .getGenericParamList ( ) .getATypeParam ( )
0 commit comments