@@ -33,18 +33,16 @@ pub type ElidedLifetime = Result<ty::Region, Option<Vec<ElisionFailureInfo>>>;
33
33
/// Defines strategies for handling regions that are omitted. For
34
34
/// example, if one writes the type `&Foo`, then the lifetime of
35
35
/// this reference has been omitted. When converting this
36
- /// type, the generic functions in astconv will invoke `anon_regions `
36
+ /// type, the generic functions in astconv will invoke `anon_region `
37
37
/// on the provided region-scope to decide how to translate this
38
38
/// omitted region.
39
39
///
40
- /// It is not always legal to omit regions, therefore `anon_regions `
40
+ /// It is not always legal to omit regions, therefore `anon_region `
41
41
/// can return `Err(())` to indicate that this is not a scope in which
42
42
/// regions can legally be omitted.
43
43
pub trait RegionScope {
44
- fn anon_regions ( & self ,
45
- span : Span ,
46
- count : usize )
47
- -> Result < Vec < ty:: Region > , Option < Vec < ElisionFailureInfo > > > ;
44
+ fn anon_region ( & self , span : Span )
45
+ -> Result < ty:: Region , Option < Vec < ElisionFailureInfo > > > ;
48
46
49
47
/// If an object omits any explicit lifetime bound, and none can
50
48
/// be derived from the object traits, what should we use? If
@@ -117,11 +115,9 @@ impl<R: RegionScope> RegionScope for MaybeWithAnonTypes<R> {
117
115
self . base_scope . object_lifetime_default ( span)
118
116
}
119
117
120
- fn anon_regions ( & self ,
121
- span : Span ,
122
- count : usize )
123
- -> Result < Vec < ty:: Region > , Option < Vec < ElisionFailureInfo > > > {
124
- self . base_scope . anon_regions ( span, count)
118
+ fn anon_region ( & self , span : Span )
119
+ -> Result < ty:: Region , Option < Vec < ElisionFailureInfo > > > {
120
+ self . base_scope . anon_region ( span)
125
121
}
126
122
127
123
fn base_object_lifetime_default ( & self , span : Span ) -> ty:: Region {
@@ -139,10 +135,8 @@ impl<R: RegionScope> RegionScope for MaybeWithAnonTypes<R> {
139
135
pub struct ExplicitRscope ;
140
136
141
137
impl RegionScope for ExplicitRscope {
142
- fn anon_regions ( & self ,
143
- _span : Span ,
144
- _count : usize )
145
- -> Result < Vec < ty:: Region > , Option < Vec < ElisionFailureInfo > > > {
138
+ fn anon_region ( & self , _span : Span )
139
+ -> Result < ty:: Region , Option < Vec < ElisionFailureInfo > > > {
146
140
Err ( None )
147
141
}
148
142
@@ -165,12 +159,9 @@ impl UnelidableRscope {
165
159
}
166
160
167
161
impl RegionScope for UnelidableRscope {
168
- fn anon_regions ( & self ,
169
- _span : Span ,
170
- _count : usize )
171
- -> Result < Vec < ty:: Region > , Option < Vec < ElisionFailureInfo > > > {
172
- let UnelidableRscope ( ref v) = * self ;
173
- Err ( v. clone ( ) )
162
+ fn anon_region ( & self , _span : Span )
163
+ -> Result < ty:: Region , Option < Vec < ElisionFailureInfo > > > {
164
+ Err ( self . 0 . clone ( ) )
174
165
}
175
166
176
167
fn object_lifetime_default ( & self , span : Span ) -> Option < ty:: Region > {
@@ -208,12 +199,10 @@ impl RegionScope for ElidableRscope {
208
199
ty:: ReStatic
209
200
}
210
201
211
- fn anon_regions ( & self ,
212
- _span : Span ,
213
- count : usize )
214
- -> Result < Vec < ty:: Region > , Option < Vec < ElisionFailureInfo > > >
202
+ fn anon_region ( & self , _span : Span )
203
+ -> Result < ty:: Region , Option < Vec < ElisionFailureInfo > > >
215
204
{
216
- Ok ( vec ! [ self . default ; count ] )
205
+ Ok ( self . default )
217
206
}
218
207
}
219
208
@@ -232,10 +221,8 @@ impl<'a, 'gcx: 'a + 'tcx, 'tcx: 'a> StaticRscope<'a, 'gcx, 'tcx> {
232
221
}
233
222
234
223
impl < ' a , ' gcx : ' a + ' tcx , ' tcx : ' a > RegionScope for StaticRscope < ' a , ' gcx , ' tcx > {
235
- fn anon_regions ( & self ,
236
- span : Span ,
237
- count : usize )
238
- -> Result < Vec < ty:: Region > , Option < Vec < ElisionFailureInfo > > > {
224
+ fn anon_region ( & self , span : Span )
225
+ -> Result < ty:: Region , Option < Vec < ElisionFailureInfo > > > {
239
226
if !self . tcx . sess . features . borrow ( ) . static_in_const {
240
227
self . tcx
241
228
. sess
@@ -244,7 +231,7 @@ impl<'a, 'gcx: 'a + 'tcx, 'tcx: 'a> RegionScope for StaticRscope<'a, 'gcx, 'tcx>
244
231
`static_in_const` feature, see #35897")
245
232
. emit ( ) ;
246
233
}
247
- Ok ( vec ! [ ty:: ReStatic ; count ] )
234
+ Ok ( ty:: ReStatic )
248
235
}
249
236
250
237
fn object_lifetime_default ( & self , span : Span ) -> Option < ty:: Region > {
@@ -268,12 +255,6 @@ impl BindingRscope {
268
255
anon_bindings : Cell :: new ( 0 ) ,
269
256
}
270
257
}
271
-
272
- fn next_region ( & self ) -> ty:: Region {
273
- let idx = self . anon_bindings . get ( ) ;
274
- self . anon_bindings . set ( idx + 1 ) ;
275
- ty:: ReLateBound ( ty:: DebruijnIndex :: new ( 1 ) , ty:: BrAnon ( idx) )
276
- }
277
258
}
278
259
279
260
impl RegionScope for BindingRscope {
@@ -288,12 +269,12 @@ impl RegionScope for BindingRscope {
288
269
ty:: ReStatic
289
270
}
290
271
291
- fn anon_regions ( & self ,
292
- _: Span ,
293
- count : usize )
294
- -> Result < Vec < ty:: Region > , Option < Vec < ElisionFailureInfo > > >
272
+ fn anon_region ( & self , _: Span )
273
+ -> Result < ty:: Region , Option < Vec < ElisionFailureInfo > > >
295
274
{
296
- Ok ( ( 0 ..count) . map ( |_| self . next_region ( ) ) . collect ( ) )
275
+ let idx = self . anon_bindings . get ( ) ;
276
+ self . anon_bindings . set ( idx + 1 ) ;
277
+ Ok ( ty:: ReLateBound ( ty:: DebruijnIndex :: new ( 1 ) , ty:: BrAnon ( idx) ) )
297
278
}
298
279
}
299
280
@@ -334,12 +315,10 @@ impl<'r> RegionScope for ObjectLifetimeDefaultRscope<'r> {
334
315
self . base_scope . base_object_lifetime_default ( span)
335
316
}
336
317
337
- fn anon_regions ( & self ,
338
- span : Span ,
339
- count : usize )
340
- -> Result < Vec < ty:: Region > , Option < Vec < ElisionFailureInfo > > >
318
+ fn anon_region ( & self , span : Span )
319
+ -> Result < ty:: Region , Option < Vec < ElisionFailureInfo > > >
341
320
{
342
- self . base_scope . anon_regions ( span, count )
321
+ self . base_scope . anon_region ( span)
343
322
}
344
323
345
324
fn anon_type_scope ( & self ) -> Option < AnonTypeScope > {
@@ -369,22 +348,10 @@ impl<'r> RegionScope for ShiftedRscope<'r> {
369
348
ty:: fold:: shift_region ( self . base_scope . base_object_lifetime_default ( span) , 1 )
370
349
}
371
350
372
- fn anon_regions ( & self ,
373
- span : Span ,
374
- count : usize )
375
- -> Result < Vec < ty:: Region > , Option < Vec < ElisionFailureInfo > > >
351
+ fn anon_region ( & self , span : Span )
352
+ -> Result < ty:: Region , Option < Vec < ElisionFailureInfo > > >
376
353
{
377
- match self . base_scope . anon_regions ( span, count) {
378
- Ok ( mut v) => {
379
- for r in & mut v {
380
- * r = ty:: fold:: shift_region ( * r, 1 ) ;
381
- }
382
- Ok ( v)
383
- }
384
- Err ( errs) => {
385
- Err ( errs)
386
- }
387
- }
354
+ self . base_scope . anon_region ( span) . map ( |r| ty:: fold:: shift_region ( r, 1 ) )
388
355
}
389
356
390
357
fn anon_type_scope ( & self ) -> Option < AnonTypeScope > {
0 commit comments