@@ -175,22 +175,26 @@ pub fn decode_predicates<'a, 'tcx, D>(decoder: &mut D)
175
175
where D : TyDecoder < ' a , ' tcx > ,
176
176
' tcx : ' a ,
177
177
{
178
+ let parent = Decodable :: decode ( decoder) ?;
179
+ let decoder_len = decoder. read_usize ( ) ?;
180
+ let mut predicates = Vec :: with_capacity ( decoder_len) ;
181
+ for _ in 0 ..decoder_len {
182
+ // Handle shorthands first, if we have an usize > 0x80.
183
+ let predicate = if decoder. positioned_at_shorthand ( ) {
184
+ let pos = decoder. read_usize ( ) ?;
185
+ assert ! ( pos >= SHORTHAND_OFFSET ) ;
186
+ let shorthand = pos - SHORTHAND_OFFSET ;
187
+
188
+ decoder. with_position ( shorthand, ty:: Predicate :: decode)
189
+ } else {
190
+ ty:: Predicate :: decode ( decoder)
191
+ } ?;
192
+ predicates. push ( ( predicate, Decodable :: decode ( decoder) ?) )
193
+ }
194
+
178
195
Ok ( ty:: GenericPredicates {
179
- parent : Decodable :: decode ( decoder) ?,
180
- predicates : ( 0 ..decoder. read_usize ( ) ?) . map ( |_| {
181
- // Handle shorthands first, if we have an usize > 0x80.
182
- let predicate = if decoder. positioned_at_shorthand ( ) {
183
- let pos = decoder. read_usize ( ) ?;
184
- assert ! ( pos >= SHORTHAND_OFFSET ) ;
185
- let shorthand = pos - SHORTHAND_OFFSET ;
186
-
187
- decoder. with_position ( shorthand, ty:: Predicate :: decode)
188
- } else {
189
- ty:: Predicate :: decode ( decoder)
190
- } ?;
191
- Ok ( ( predicate, Decodable :: decode ( decoder) ?) )
192
- } )
193
- . collect :: < Result < Vec < _ > , _ > > ( ) ?,
196
+ parent,
197
+ predicates
194
198
} )
195
199
}
196
200
0 commit comments