@@ -31,6 +31,27 @@ class BuiltinType extends Struct {
3131 string getName ( ) { result = super .getName ( ) .getText ( ) }
3232}
3333
34+ /**
35+ * A numerical type, such as `i64`, `usize`, `f32` or `f64`.
36+ */
37+ abstract private class NumericTypeImpl extends BuiltinType { }
38+
39+ final class NumericType = NumericTypeImpl ;
40+
41+ /**
42+ * An integral numerical type, such as `i64` or `usize`.
43+ */
44+ abstract private class IntegralTypeImpl extends NumericTypeImpl { }
45+
46+ final class IntegralType = IntegralTypeImpl ;
47+
48+ /**
49+ * A floating-point numerical type, such as `f32` or `f64`.
50+ */
51+ abstract private class FloatingPointTypeImpl extends NumericTypeImpl { }
52+
53+ final class FloatingPointType = FloatingPointTypeImpl ;
54+
3455/** The builtin `bool` type. */
3556class Bool extends BuiltinType {
3657 Bool ( ) { this .getName ( ) = "bool" }
@@ -47,71 +68,71 @@ class Str extends BuiltinType {
4768}
4869
4970/** The builtin `i8` type. */
50- class I8 extends BuiltinType {
71+ class I8 extends IntegralTypeImpl {
5172 I8 ( ) { this .getName ( ) = "i8" }
5273}
5374
5475/** The builtin `i16` type. */
55- class I16 extends BuiltinType {
76+ class I16 extends IntegralTypeImpl {
5677 I16 ( ) { this .getName ( ) = "i16" }
5778}
5879
5980/** The builtin `i32` type. */
60- class I32 extends BuiltinType {
81+ class I32 extends IntegralTypeImpl {
6182 I32 ( ) { this .getName ( ) = "i32" }
6283}
6384
6485/** The builtin `i64` type. */
65- class I64 extends BuiltinType {
86+ class I64 extends IntegralTypeImpl {
6687 I64 ( ) { this .getName ( ) = "i64" }
6788}
6889
6990/** The builtin `i128` type. */
70- class I128 extends BuiltinType {
91+ class I128 extends IntegralTypeImpl {
7192 I128 ( ) { this .getName ( ) = "i128" }
7293}
7394
7495/** The builtin `u8` type. */
75- class U8 extends BuiltinType {
96+ class U8 extends IntegralTypeImpl {
7697 U8 ( ) { this .getName ( ) = "u8" }
7798}
7899
79100/** The builtin `u16` type. */
80- class U16 extends BuiltinType {
101+ class U16 extends IntegralTypeImpl {
81102 U16 ( ) { this .getName ( ) = "u16" }
82103}
83104
84105/** The builtin `u32` type. */
85- class U32 extends BuiltinType {
106+ class U32 extends IntegralTypeImpl {
86107 U32 ( ) { this .getName ( ) = "u32" }
87108}
88109
89110/** The builtin `u64` type. */
90- class U64 extends BuiltinType {
111+ class U64 extends IntegralTypeImpl {
91112 U64 ( ) { this .getName ( ) = "u64" }
92113}
93114
94115/** The builtin `u128` type. */
95- class U128 extends BuiltinType {
116+ class U128 extends IntegralTypeImpl {
96117 U128 ( ) { this .getName ( ) = "u128" }
97118}
98119
99120/** The builtin `usize` type. */
100- class Usize extends BuiltinType {
121+ class Usize extends IntegralTypeImpl {
101122 Usize ( ) { this .getName ( ) = "usize" }
102123}
103124
104125/** The builtin `isize` type. */
105- class Isize extends BuiltinType {
126+ class Isize extends IntegralTypeImpl {
106127 Isize ( ) { this .getName ( ) = "isize" }
107128}
108129
109130/** The builtin `f32` type. */
110- class F32 extends BuiltinType {
131+ class F32 extends FloatingPointTypeImpl {
111132 F32 ( ) { this .getName ( ) = "f32" }
112133}
113134
114135/** The builtin `f64` type. */
115- class F64 extends BuiltinType {
136+ class F64 extends FloatingPointTypeImpl {
116137 F64 ( ) { this .getName ( ) = "f64" }
117138}
0 commit comments