@@ -32,10 +32,8 @@ private predicate dynTraitTypeParameter(Trait trait, AstNode n) {
3232
3333cached
3434newtype TType =
35- TStruct ( Struct s ) { Stages:: TypeInferenceStage:: ref ( ) } or
36- TEnum ( Enum e ) or
35+ TDataType ( TypeItem ti ) { Stages:: TypeInferenceStage:: ref ( ) } or
3736TTrait ( Trait t ) or
38- TUnion ( Union u ) or
3937TImplTraitType ( ImplTraitTypeRepr impl ) or
4038TDynTraitType ( Trait t ) { t = any ( DynTraitTypeRepr dt ) .getTrait ( ) } or
4139TNeverType ( ) or
@@ -92,7 +90,7 @@ abstract class Type extends TType {
9290class TupleType extends StructType {
9391private int arity ;
9492
95- TupleType ( ) { arity = this .getStruct ( ) .( Builtins:: TupleType ) .getArity ( ) }
93+ TupleType ( ) { arity = this .getTypeItem ( ) .( Builtins:: TupleType ) .getArity ( ) }
9694
9795/** Gets the arity of this tuple type. */
9896int getArity ( ) { result = arity }
@@ -112,48 +110,55 @@ class UnitType extends TupleType {
112110override string toString ( ) { result = "()" }
113111}
114112
115- /** A struct type. */
116- class StructType extends Type , TStruct {
117- private Struct struct ;
113+ class DataType extends Type , TDataType {
114+ private TypeItem typeItem ;
118115
119- StructType ( ) { this = TStruct ( struct ) }
116+ DataType ( ) { this = TDataType ( typeItem ) }
120117
121- /** Gets thestruct that thisstruct type represents. */
122- Struct getStruct ( ) { result = struct }
118+ /** Gets thetype item that thisdata type represents. */
119+ TypeItem getTypeItem ( ) { result = typeItem }
123120
124121override TypeParameter getPositionalTypeParameter ( int i ) {
125- result = TTypeParamTypeParameter ( struct .getGenericParamList ( ) .getTypeParam ( i ) )
122+ result = TTypeParamTypeParameter ( typeItem .getGenericParamList ( ) .getTypeParam ( i ) )
126123}
127124
128125override TypeMention getTypeParameterDefault ( int i ) {
129- result = struct .getGenericParamList ( ) .getTypeParam ( i ) .getDefaultType ( )
126+ result = typeItem .getGenericParamList ( ) .getTypeParam ( i ) .getDefaultType ( )
130127}
131128
132- override string toString ( ) { result = struct .getName ( ) .getText ( ) }
129+ override string toString ( ) { result = typeItem .getName ( ) .getText ( ) }
133130
134- override Location getLocation ( ) { result = struct .getLocation ( ) }
131+ override Location getLocation ( ) { result = typeItem .getLocation ( ) }
132+ }
133+
134+ /** A struct type. */
135+ class StructType extends DataType {
136+ private Struct struct ;
137+
138+ StructType ( ) { struct = super .getTypeItem ( ) }
139+
140+ /** Gets the struct that this struct type represents. */
141+ override Struct getTypeItem ( ) { result = struct }
135142}
136143
137144/** An enum type. */
138- class EnumType extends Type , TEnum {
145+ class EnumType extends DataType {
139146private Enum enum ;
140147
141- EnumType ( ) { this = TEnum ( enum ) }
148+ EnumType ( ) { enum = super . getTypeItem ( ) }
142149
143150/** Gets the enum that this enum type represents. */
144- Enum getEnum ( ) { result = enum }
145-
146- override TypeParameter getPositionalTypeParameter ( int i ) {
147- result = TTypeParamTypeParameter ( enum .getGenericParamList ( ) .getTypeParam ( i ) )
148- }
151+ override Enum getTypeItem ( ) { result = enum }
152+ }
149153
150- override TypeMention getTypeParameterDefault ( int i ) {
151- result = enum . getGenericParamList ( ) . getTypeParam ( i ) . getDefaultType ( )
152- }
154+ /** A union type. */
155+ class UnionType extends DataType {
156+ private Union union ;
153157
154- override string toString ( ) { result = enum . getName ( ) . getText ( ) }
158+ UnionType ( ) { union = super . getTypeItem ( ) }
155159
156- override Location getLocation ( ) { result = enum .getLocation ( ) }
160+ /** Gets the union that this union type represents. */
161+ override Union getTypeItem ( ) { result = union }
157162}
158163
159164/** A trait type. */
@@ -186,35 +191,13 @@ class TraitType extends Type, TTrait {
186191override Location getLocation ( ) { result = trait .getLocation ( ) }
187192}
188193
189- /** A union type. */
190- class UnionType extends Type , TUnion {
191- private Union union ;
192-
193- UnionType ( ) { this = TUnion ( union ) }
194-
195- /** Gets the union that this union type represents. */
196- Union getUnion ( ) { result = union }
197-
198- override TypeParameter getPositionalTypeParameter ( int i ) {
199- result = TTypeParamTypeParameter ( union .getGenericParamList ( ) .getTypeParam ( i ) )
200- }
201-
202- override TypeMention getTypeParameterDefault ( int i ) {
203- result = union .getGenericParamList ( ) .getTypeParam ( i ) .getDefaultType ( )
204- }
205-
206- override string toString ( ) { result = union .getName ( ) .getText ( ) }
207-
208- override Location getLocation ( ) { result = union .getLocation ( ) }
209- }
210-
211194/**
212195 * An array type.
213196 *
214197 * Array types like `[i64; 5]` are modeled as normal generic types.
215198 */
216199class ArrayType extends StructType {
217- ArrayType ( ) { this .getStruct ( ) instanceof Builtins:: ArrayType }
200+ ArrayType ( ) { this .getTypeItem ( ) instanceof Builtins:: ArrayType }
218201
219202override string toString ( ) { result = "[;]" }
220203}
@@ -227,13 +210,13 @@ TypeParamTypeParameter getArrayTypeParameter() {
227210abstract class RefType extends StructType { }
228211
229212class RefMutType extends RefType {
230- RefMutType ( ) { this .getStruct ( ) instanceof Builtins:: RefMutType }
213+ RefMutType ( ) { this .getTypeItem ( ) instanceof Builtins:: RefMutType }
231214
232215override string toString ( ) { result = "&mut" }
233216}
234217
235218class RefSharedType extends RefType {
236- RefSharedType ( ) { this .getStruct ( ) instanceof Builtins:: RefSharedType }
219+ RefSharedType ( ) { this .getTypeItem ( ) instanceof Builtins:: RefSharedType }
237220
238221override string toString ( ) { result = "&" }
239222}
@@ -330,7 +313,7 @@ class ImplTraitReturnType extends ImplTraitType {
330313 * with a single type argument.
331314 */
332315class SliceType extends StructType {
333- SliceType ( ) { this .getStruct ( ) instanceof Builtins:: SliceType }
316+ SliceType ( ) { this .getTypeItem ( ) instanceof Builtins:: SliceType }
334317
335318override string toString ( ) { result = "[]" }
336319}
@@ -356,13 +339,13 @@ TypeParamTypeParameter getPtrTypeParameter() {
356339}
357340
358341class PtrMutType extends PtrType {
359- PtrMutType ( ) { this .getStruct ( ) instanceof Builtins:: PtrMutType }
342+ PtrMutType ( ) { this .getTypeItem ( ) instanceof Builtins:: PtrMutType }
360343
361344override string toString ( ) { result = "*mut" }
362345}
363346
364347class PtrConstType extends PtrType {
365- PtrConstType ( ) { this .getStruct ( ) instanceof Builtins:: PtrConstType }
348+ PtrConstType ( ) { this .getTypeItem ( ) instanceof Builtins:: PtrConstType }
366349
367350override string toString ( ) { result = "*const" }
368351}
@@ -624,7 +607,7 @@ pragma[nomagic]
624607predicate validSelfType ( Type t ) {
625608t instanceof RefType
626609or
627- exists ( Struct s | t = TStruct ( s ) |
610+ exists ( Struct s | t = TDataType ( s ) |
628611s instanceof BoxStruct or
629612s instanceof RcStruct or
630613s instanceof ArcStruct or