@@ -42,11 +42,14 @@ newtype TType =
4242 TStruct ( Struct s ) or
4343 TEnum ( Enum e ) or
4444 TTrait ( Trait t ) or
45+ TUnion ( Union u ) or
4546 TArrayType ( ) or // todo: add size?
4647 TRefType ( ) or // todo: add mut?
4748 TImplTraitType ( ImplTraitTypeRepr impl ) or
4849 TDynTraitType ( Trait t ) { t = any ( DynTraitTypeRepr dt ) .getTrait ( ) } or
4950 TSliceType ( ) or
51+ TNeverType ( ) or
52+ TPtrType ( ) or
5053 TTupleTypeParameter ( int arity , int i ) { exists ( TTuple ( arity ) ) and i in [ 0 .. arity - 1 ] } or
5154 TTypeParamTypeParameter ( TypeParam t ) or
5255 TAssociatedTypeTypeParameter ( TypeAlias t ) { any ( TraitItemNode trait ) .getAnAssocItem ( ) = t } or
@@ -57,7 +60,8 @@ newtype TType =
5760 } or
5861 TRefTypeParameter ( ) or
5962 TSelfTypeParameter ( Trait t ) or
60- TSliceTypeParameter ( )
63+ TSliceTypeParameter ( ) or
64+ TPtrTypeParameter ( )
6165
6266private predicate implTraitTypeParam ( ImplTraitTypeRepr implTrait , int i , TypeParam tp ) {
6367 implTrait .isInReturnPos ( ) and
@@ -224,6 +228,31 @@ class TraitType extends Type, TTrait {
224228 override Location getLocation ( ) { result = trait .getLocation ( ) }
225229}
226230
231+ /** A union type. */
232+ class UnionType extends StructOrEnumType , TUnion {
233+ private Union union ;
234+
235+ UnionType ( ) { this = TUnion ( union ) }
236+
237+ override ItemNode asItemNode ( ) { result = union }
238+
239+ override StructField getStructField ( string name ) { result = union .getStructField ( name ) }
240+
241+ override TupleField getTupleField ( int i ) { none ( ) }
242+
243+ override TypeParameter getPositionalTypeParameter ( int i ) {
244+ result = TTypeParamTypeParameter ( union .getGenericParamList ( ) .getTypeParam ( i ) )
245+ }
246+
247+ override TypeMention getTypeParameterDefault ( int i ) {
248+ result = union .getGenericParamList ( ) .getTypeParam ( i ) .getDefaultType ( )
249+ }
250+
251+ override string toString ( ) { result = union .getName ( ) .getText ( ) }
252+
253+ override Location getLocation ( ) { result = union .getLocation ( ) }
254+ }
255+
227256/**
228257 * An array type.
229258 *
@@ -374,6 +403,33 @@ class SliceType extends Type, TSliceType {
374403 override Location getLocation ( ) { result instanceof EmptyLocation }
375404}
376405
406+ class NeverType extends Type , TNeverType {
407+ override StructField getStructField ( string name ) { none ( ) }
408+
409+ override TupleField getTupleField ( int i ) { none ( ) }
410+
411+ override TypeParameter getPositionalTypeParameter ( int i ) { none ( ) }
412+
413+ override string toString ( ) { result = "!" }
414+
415+ override Location getLocation ( ) { result instanceof EmptyLocation }
416+ }
417+
418+ class PtrType extends Type , TPtrType {
419+ override StructField getStructField ( string name ) { none ( ) }
420+
421+ override TupleField getTupleField ( int i ) { none ( ) }
422+
423+ override TypeParameter getPositionalTypeParameter ( int i ) {
424+ i = 0 and
425+ result = TPtrTypeParameter ( )
426+ }
427+
428+ override string toString ( ) { result = "*" }
429+
430+ override Location getLocation ( ) { result instanceof EmptyLocation }
431+ }
432+
377433/** A type parameter. */
378434abstract class TypeParameter extends Type {
379435 override StructField getStructField ( string name ) { none ( ) }
@@ -529,6 +585,12 @@ class SliceTypeParameter extends TypeParameter, TSliceTypeParameter {
529585 override Location getLocation ( ) { result instanceof EmptyLocation }
530586}
531587
588+ class PtrTypeParameter extends TypeParameter , TPtrTypeParameter {
589+ override string toString ( ) { result = "*T" }
590+
591+ override Location getLocation ( ) { result instanceof EmptyLocation }
592+ }
593+
532594/**
533595 * The implicit `Self` type parameter of a trait, that refers to the
534596 * implementing type of the trait.
0 commit comments