@@ -2,7 +2,6 @@ use std::iter;
2
2
use std:: ops:: { self , ControlFlow } ;
3
3
4
4
use base_db:: Crate ;
5
- use extension_traits:: extension;
6
5
use hir_def:: lang_item:: LangItem ;
7
6
use hir_def:: { BlockId , HasModule , ItemContainerId , Lookup } ;
8
7
use intern:: sym;
@@ -72,8 +71,17 @@ impl<'db> Discr<'db> {
72
71
}
73
72
}
74
73
75
- #[ extension( pub trait IntegerTypeExt ) ]
76
- impl IntegerType {
74
+ pub trait IntegerTypeExt {
75
+ fn to_ty < ' db > ( & self , interner : DbInterner < ' db > ) -> Ty < ' db > ;
76
+ fn initial_discriminant < ' db > ( & self , interner : DbInterner < ' db > ) -> Discr < ' db > ;
77
+ fn disr_incr < ' db > (
78
+ & self ,
79
+ interner : DbInterner < ' db > ,
<
6D3F
tr class="diff-line-row">
80
+ val : Option < Discr < ' db > > ,
81
+ ) -> Option < Discr < ' db > > ;
82
+ }
83
+
84
+ impl IntegerTypeExt for IntegerType {
77
85
fn to_ty < ' db > ( & self , interner : DbInterner < ' db > ) -> Ty < ' db > {
78
86
match self {
79
87
IntegerType :: Pointer ( true ) => Ty :: new ( interner, TyKind :: Int ( IntTy :: Isize ) ) ,
@@ -101,8 +109,20 @@ impl IntegerType {
101
109
}
102
110
}
103
111
104
- #[ extension( pub trait IntegerExt ) ]
105
- impl Integer {
112
+ pub trait IntegerExt {
113
+ fn to_ty < ' db > ( & self , interner : DbInterner < ' db > , signed : bool ) -> Ty < ' db > ;
114
+ fn from_int_ty < C : HasDataLayout > ( cx : & C , ity : IntTy) -> Integer ;
115
+ fn from_uint_ty < C : HasDataLayout > ( cx : & C , ity : UintTy ) -> Integer ;
116
+ fn repr_discr < ' db > (
117
+ interner : DbInterner < ' db > ,
118
+ ty : Ty < ' db > ,
119
+ repr : & ReprOptions ,
120
+ min : i128 ,
121
+ max : i128 ,
122
+ ) -> ( Integer , bool ) ;
123
+ }
124
+
125
+ impl IntegerExt for Integer {
106
126
#[ inline]
107
127
fn to_ty < ' db > ( & self , interner : DbInterner < ' db > , signed : bool ) -> Ty < ' db > {
108
128
use Integer :: * ;
@@ -192,8 +212,12 @@ impl Integer {
192
212
}
193
213
}
194
214
195
- #[ extension( pub trait FloatExt ) ]
196
- impl Float {
215
+ pub trait FloatExt {
216
+ fn to_ty < ' db > ( & self , interner : DbInterner < ' db > ) -> Ty < ' db > ;
217
+ fn from_float_ty ( fty : FloatTy ) -> Self ;
218
+ }
219
+
220
+ impl FloatExt for Float {
197
221
#[ inline]
198
222
fn to_ty < ' db > ( & self , interner : DbInterner < ' db > ) -> Ty < ' db > {
199
223
use Float :: * ;
@@ -216,8 +240,12 @@ impl Float {
216
240
}
217
241
}
218
242
219
- #[ extension( pub trait PrimitiveExt ) ]
220
- impl Primitive {
243
+ pub trait PrimitiveExt {
244
+ fn to_ty < ' db > ( & self , interner : DbInterner < ' db > ) -> Ty < ' db > ;
245
+ fn to_int_ty < ' db > ( & self , interner : DbInterner < ' db > ) -> Ty < ' db > ;
246
+ }
247
+
248
+ impl PrimitiveExt for Primitive {
221
249
#[ inline]
222
250
fn to_ty < ' db > ( & self , interner : DbInterner < ' db > ) -> Ty < ' db > {
223
251
match * self {
@@ -254,8 +282,11 @@ impl<'db> HasDataLayout for DbInterner<'db> {
254
282
}
255
283
}
256
284
257
- #[ extension( pub trait CoroutineArgsExt ) ]
258
- impl < ' db > CoroutineArgs < DbInterner < ' db > > {
285
+ pub trait CoroutineArgsExt < ' db > {
286
+ fn discr_ty ( & self , interner : DbInterner < ' db > ) -> Ty < ' db > ;
287
+ }
288
+
289
+ impl < ' db > CoroutineArgsExt < ' db > for CoroutineArgs < DbInterner < ' db > > {
259
290
/// The type of the state discriminant used in the coroutine type.
260
291
#[ inline]
261
292
fn discr_ty ( & self , interner : DbInterner < ' db > ) -> Ty < ' db > {
0 commit comments