1
1
use rustc_data_structures:: stable_hasher:: HashStable ;
2
2
use rustc_data_structures:: stable_hasher:: StableHasher ;
3
- use rustc_serialize:: { Decodable , Decoder , Encodable } ;
4
3
use std:: fmt;
5
4
6
- use crate :: {
7
- DebruijnIndex , DebugWithInfcx , HashStableContext , InferCtxtLike , Interner , TyDecoder ,
8
- TyEncoder , WithInfcx ,
9
- } ;
5
+ use crate :: { DebruijnIndex , DebugWithInfcx , HashStableContext , InferCtxtLike , Interner , WithInfcx } ;
10
6
11
7
use self :: ConstKind :: * ;
12
8
@@ -20,6 +16,7 @@ use self::ConstKind::*;
20
16
Ord = "feature_allow_slow_enum" ,
21
17
Hash ( bound = "" )
22
18
) ]
19
+ #[ derive( TyEncodable , TyDecodable ) ]
23
20
pub enum ConstKind < I : Interner > {
24
21
/// A const generic parameter.
25
22
Param ( I :: ParamConst ) ,
92
89
}
93
90
}
94
91
95
- impl < I : Interner , D : TyDecoder < I = I > > Decodable < D > for ConstKind < I >
96
- where
97
- I :: ParamConst : Decodable < D > ,
98
- I :: InferConst : Decodable < D > ,
99
- I :: BoundConst : Decodable < D > ,
100
- I :: PlaceholderConst : Decodable < D > ,
101
- I :: AliasConst : Decodable < D > ,
102
- I :: ValueConst : Decodable < D > ,
103
- I :: ErrorGuaranteed : Decodable < D > ,
104
- I :: ExprConst : Decodable < D > ,
105
- {
106
- fn decode ( d : & mut D ) -> Self {
107
- match Decoder :: read_usize ( d) {
108
- 0 => Param ( Decodable :: decode ( d) ) ,
109
- 1 => Infer ( Decodable :: decode ( d) ) ,
110
- 2 => Bound ( Decodable :: decode ( d) , Decodable :: decode ( d) ) ,
111
- 3 => Placeholder ( Decodable :: decode ( d) ) ,
112
- 4 => Unevaluated ( Decodable :: decode ( d) ) ,
113
- 5 => Value ( Decodable :: decode ( d) ) ,
114
- 6 => Error ( Decodable :: decode ( d) ) ,
115
- 7 => Expr ( Decodable :: decode ( d) ) ,
116
- _ => panic ! (
117
- "{}" ,
118
- format!(
119
- "invalid enum variant tag while decoding `{}`, expected 0..{}" ,
120
- "ConstKind" , 8 ,
121
- )
122
- ) ,
123
- }
124
- }
125
- }
126
-
127
- impl < I : Interner , E : TyEncoder < I = I > > Encodable < E > for ConstKind < I >
128
- where
129
- I :: ParamConst : Encodable < E > ,
130
- I :: InferConst : Encodable < E > ,
131
- I :: BoundConst : Encodable < E > ,
132
- I :: PlaceholderConst : Encodable < E > ,
133
- I :: AliasConst : Encodable < E > ,
134
- I :: ValueConst : Encodable < E > ,
135
- I :: ErrorGuaranteed : Encodable < E > ,
136
- I :: ExprConst : Encodable < E > ,
137
- {
138
- fn encode ( & self , e : & mut E ) {
139
- let disc = const_kind_discriminant ( self ) ;
140
- match self {
141
- Param ( p) => e. emit_enum_variant ( disc, |e| p. encode ( e) ) ,
142
- Infer ( i) => e. emit_enum_variant ( disc, |e| i. encode ( e) ) ,
143
- Bound ( d, b) => e. emit_enum_variant ( disc, |e| {
144
- d. encode ( e) ;
145
- b. encode ( e) ;
146
- } ) ,
147
- Placeholder ( p) => e. emit_enum_variant ( disc, |e| p. encode ( e) ) ,
148
- Unevaluated ( u) => e. emit_enum_variant ( disc, |e| u. encode ( e) ) ,
149
- Value ( v) => e. emit_enum_variant ( disc, |e| v. encode ( e) ) ,
150
- Error ( er) => e. emit_enum_variant ( disc, |e| er. encode ( e) ) ,
151
- Expr ( ex) => e. emit_enum_variant ( disc, |e| ex. encode ( e) ) ,
152
- }
153
- }
154
- }
155
-
156
92
impl < I : Interner > PartialEq for ConstKind < I > {
157
93
fn eq ( & self , other : & Self ) -> bool {
158
94
match ( self , other) {
0 commit comments