@@ -45,14 +45,14 @@ use super::FnCtxt;
45
45
use middle:: expr_use_visitor as euv;
46
46
use middle:: mem_categorization as mc;
47
47
use middle:: mem_categorization:: Categorization ;
48
+ use rustc:: hir;
48
49
use rustc:: hir:: def_id:: DefId ;
49
- use rustc:: ty:: { self , Ty , TyCtxt , UpvarSubsts } ;
50
+ use rustc:: hir:: def_id:: LocalDefId ;
51
+ use rustc:: hir:: intravisit:: { self , NestedVisitorMap , Visitor } ;
50
52
use rustc:: infer:: UpvarRegion ;
53
+ use rustc:: ty:: { self , Ty , TyCtxt , UpvarSubsts } ;
51
54
use syntax:: ast;
52
55
use syntax_pos:: Span ;
53
- use rustc:: hir;
54
- use rustc:: hir:: def_id:: LocalDefId ;
55
- use rustc:: hir:: intravisit:: { self , NestedVisitorMap , Visitor } ;
56
56
57
57
impl < ' a , ' gcx , ' tcx > FnCtxt < ' a , ' gcx , ' tcx > {
58
58
pub fn closure_analyze ( & self , body : & ' gcx hir:: Body ) {
@@ -121,7 +121,7 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
121
121
}
122
122
} ;
123
123
124
- let infer_kind = if let UpvarSubsts :: Closure ( closure_substs) = substs{
124
+ let infer_kind = if let UpvarSubsts :: Closure ( closure_substs) = substs {
125
125
if self . closure_kind ( closure_def_id, closure_substs) . is_none ( ) {
126
126
Some ( closure_substs)
127
127
} else {
@@ -213,12 +213,11 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
213
213
let final_upvar_tys = self . final_upvar_tys ( closure_node_id) ;
214
214
debug ! (
215
215
"analyze_closure: id={:?} substs={:?} final_upvar_tys={:?}" ,
216
- closure_node_id,
217
- substs,
218
- final_upvar_tys
216
+ closure_node_id, substs, final_upvar_tys
219
217
) ;
220
- for ( upvar_ty, final_upvar_ty) in substs. upvar_tys ( closure_def_id, self . tcx )
221
- . zip ( final_upvar_tys)
218
+ for ( upvar_ty, final_upvar_ty) in substs
219
+ . upvar_tys ( closure_def_id, self . tcx )
220
+ . zip ( final_upvar_tys)
222
221
{
223
222
self . demand_suptype ( span, upvar_ty, final_upvar_ty) ;
224
223
}
@@ -256,9 +255,7 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
256
255
257
256
debug ! (
258
257
"var_id={:?} freevar_ty={:?} capture={:?}" ,
259
- var_node_id,
260
- freevar_ty,
261
- capture
258
+ var_node_id, freevar_ty, capture
262
259
) ;
263
260
264
261
match capture {
@@ -271,8 +268,7 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
271
268
} ,
272
269
) ,
273
270
}
274
- } )
275
- . collect ( )
271
+ } ) . collect ( )
276
272
} )
277
273
}
278
274
}
@@ -301,12 +297,14 @@ struct InferBorrowKind<'a, 'gcx: 'a + 'tcx, 'tcx: 'a> {
301
297
}
302
298
303
299
impl < ' a , ' gcx , ' tcx > InferBorrowKind < ' a , ' gcx , ' tcx > {
304
- fn adjust_upvar_borrow_kind_for_consume ( & mut self , cmt : & mc:: cmt_ < ' tcx > ,
305
- mode : euv:: ConsumeMode ) {
300
+ fn adjust_upvar_borrow_kind_for_consume (
301
+ & mut self ,
302
+ cmt : & mc:: cmt_ < ' tcx > ,
303
+ mode : euv:: ConsumeMode ,
304
+ ) {
306
305
debug ! (
307
306
"adjust_upvar_borrow_kind_for_consume(cmt={:?}, mode={:?})" ,
308
- cmt,
309
- mode
307
+ cmt, mode
310
308
) ;
311
309
312
310
// we only care about moves
@@ -381,9 +379,9 @@ impl<'a, 'gcx, 'tcx> InferBorrowKind<'a, 'gcx, 'tcx> {
381
379
debug ! ( "adjust_upvar_borrow_kind_for_mut(cmt={:?})" , cmt) ;
382
380
383
381
match cmt. cat . clone ( ) {
384
- Categorization :: Deref ( base, mc:: Unique ) |
385
- Categorization :: Interior ( base, _) |
386
- Categorization :: Downcast ( base, _) => {
382
+ Categorization :: Deref ( base, mc:: Unique )
383
+ | Categorization :: Interior ( base, _)
384
+ | Categorization :: Downcast ( base, _) => {
387
385
// Interior or owned data is mutable if base is
388
386
// mutable, so iterate to the base.
389
387
self . adjust_upvar_borrow_kind_for_mut ( & base) ;
@@ -399,12 +397,12 @@ impl<'a, 'gcx, 'tcx> InferBorrowKind<'a, 'gcx, 'tcx> {
399
397
}
400
398
}
401
399
402
- Categorization :: Deref ( _, mc:: UnsafePtr ( ..) ) |
403
- Categorization :: StaticItem |
404
- Categorization :: ThreadLocal ( ..) |
405
- Categorization :: Rvalue ( ..) |
406
- Categorization :: Local ( _) |
407
- Categorization :: Upvar ( ..) => {
400
+ Categorization :: Deref ( _, mc:: UnsafePtr ( ..) )
401
+ | Categorization :: StaticItem
402
+ | Categorization :: ThreadLocal ( ..)
403
+ | Categorization :: Rvalue ( ..)
404
+ | Categorization :: Local ( _)
405
+ | Categorization :: Upvar ( ..) => {
408
406
return ;
409
407
}
410
408
}
@@ -414,9 +412,9 @@ impl<'a, 'gcx, 'tcx> InferBorrowKind<'a, 'gcx, 'tcx> {
414
412
debug ! ( "adjust_upvar_borrow_kind_for_unique(cmt={:?})" , cmt) ;
415
413
416
414
match cmt. cat . clone ( ) {
417
- Categorization :: Deref ( base, mc:: Unique ) |
418
- Categorization :: Interior ( base, _) |
419
- Categorization :: Downcast ( base, _) => {
415
+ Categorization :: Deref ( base, mc:: Unique )
416
+ | Categorization :: Interior ( base, _)
417
+ | Categorization :: Downcast ( base, _) => {
420
418
// Interior or owned data is unique if base is
421
419
// unique.
422
420
self . adjust_upvar_borrow_kind_for_unique ( & base) ;
@@ -430,18 +428,20 @@ impl<'a, 'gcx, 'tcx> InferBorrowKind<'a, 'gcx, 'tcx> {
430
428
}
431
429
}
432
430
433
- Categorization :: Deref ( _, mc:: UnsafePtr ( ..) ) |
434
- Categorization :: StaticItem |
435
- Categorization :: ThreadLocal ( ..) |
436
- Categorization :: Rvalue ( ..) |
437
- Categorization :: Local ( _) |
438
- Categorization :: Upvar ( ..) => { }
431
+ Categorization :: Deref ( _, mc:: UnsafePtr ( ..) )
432
+ | Categorization :: StaticItem
433
+ | Categorization :: ThreadLocal ( ..)
434
+ | Categorization :: Rvalue ( ..)
435
+ | Categorization :: Local ( _)
436
+ | Categorization :: Upvar ( ..) => { }
439
437
}
440
438
}
441
439
442
- fn try_adjust_upvar_deref ( & mut self , cmt : & mc:: cmt_ < ' tcx > , borrow_kind : ty:: BorrowKind )
443
- -> bool
444
- {
440
+ fn try_adjust_upvar_deref (
441
+ & mut self ,
442
+ cmt : & mc:: cmt_ < ' tcx > ,
443
+ borrow_kind : ty:: BorrowKind ,
444
+ ) -> bool {
445
445
assert ! ( match borrow_kind {
446
446
ty:: MutBorrow => true ,
447
447
ty:: UniqueImmBorrow => true ,
@@ -493,15 +493,14 @@ impl<'a, 'gcx, 'tcx> InferBorrowKind<'a, 'gcx, 'tcx> {
493
493
/// Here the argument `mutbl` is the borrow_kind that is required by
494
494
/// some particular use.
495
495
fn adjust_upvar_borrow_kind ( & mut self , upvar_id : ty:: UpvarId , kind : ty:: BorrowKind ) {
496
- let upvar_capture = self . adjust_upvar_captures
496
+ let upvar_capture = self
497
+ . adjust_upvar_captures
497
498
. get ( & upvar_id)
498
499
. cloned ( )
499
500
. unwrap_or_else ( || self . fcx . tables . borrow ( ) . upvar_capture ( upvar_id) ) ;
500
501
debug ! (
501
502
"adjust_upvar_borrow_kind(upvar_id={:?}, upvar_capture={:?}, kind={:?})" ,
502
- upvar_id,
503
- upvar_capture,
504
- kind
503
+ upvar_id, upvar_capture, kind
505
504
) ;
506
505
507
506
match upvar_capture {
@@ -511,18 +510,18 @@ impl<'a, 'gcx, 'tcx> InferBorrowKind<'a, 'gcx, 'tcx> {
511
510
ty:: UpvarCapture :: ByRef ( mut upvar_borrow) => {
512
511
match ( upvar_borrow. kind , kind) {
513
512
// Take RHS:
514
- ( ty:: ImmBorrow , ty:: UniqueImmBorrow ) |
515
- ( ty:: ImmBorrow , ty:: MutBorrow ) |
516
- ( ty:: UniqueImmBorrow , ty:: MutBorrow ) => {
513
+ ( ty:: ImmBorrow , ty:: UniqueImmBorrow )
514
+ | ( ty:: ImmBorrow , ty:: MutBorrow )
515
+ | ( ty:: UniqueImmBorrow , ty:: MutBorrow ) => {
517
516
upvar_borrow. kind = kind;
518
517
self . adjust_upvar_captures
519
518
. insert ( upvar_id, ty:: UpvarCapture :: ByRef ( upvar_borrow) ) ;
520
519
}
521
520
// Take LHS:
522
- ( ty:: ImmBorrow , ty:: ImmBorrow ) |
523
- ( ty:: UniqueImmBorrow , ty:: ImmBorrow ) |
524
- ( ty:: UniqueImmBorrow , ty:: UniqueImmBorrow ) |
525
- ( ty:: MutBorrow , _) => { }
521
+ ( ty:: ImmBorrow , ty:: ImmBorrow )
522
+ | ( ty:: UniqueImmBorrow , ty:: ImmBorrow )
523
+ | ( ty:: UniqueImmBorrow , ty:: UniqueImmBorrow )
524
+ | ( ty:: MutBorrow , _) => { }
526
525
}
527
526
}
528
527
}
@@ -537,10 +536,7 @@ impl<'a, 'gcx, 'tcx> InferBorrowKind<'a, 'gcx, 'tcx> {
537
536
) {
538
537
debug ! (
539
538
"adjust_closure_kind(closure_id={:?}, new_kind={:?}, upvar_span={:?}, var_name={})" ,
540
- closure_id,
541
- new_kind,
542
- upvar_span,
543
- var_name
539
+ closure_id, new_kind, upvar_span, var_name
544
540
) ;
545
541
546
542
// Is this the closure whose kind is currently being inferred?
@@ -554,22 +550,20 @@ impl<'a, 'gcx, 'tcx> InferBorrowKind<'a, 'gcx, 'tcx> {
554
550
555
551
debug ! (
556
552
"adjust_closure_kind: closure_id={:?}, existing_kind={:?}, new_kind={:?}" ,
557
- closure_id,
558
- existing_kind,
559
- new_kind
553
+ closure_id, existing_kind, new_kind
560
554
) ;
561
555
562
556
match ( existing_kind, new_kind) {
563
- ( ty:: ClosureKind :: Fn , ty:: ClosureKind :: Fn ) |
564
- ( ty:: ClosureKind :: FnMut , ty:: ClosureKind :: Fn ) |
565
- ( ty:: ClosureKind :: FnMut , ty:: ClosureKind :: FnMut ) |
566
- ( ty:: ClosureKind :: FnOnce , _) => {
557
+ ( ty:: ClosureKind :: Fn , ty:: ClosureKind :: Fn )
558
+ | ( ty:: ClosureKind :: FnMut , ty:: ClosureKind :: Fn )
559
+ | ( ty:: ClosureKind :: FnMut , ty:: ClosureKind :: FnMut )
560
+ | ( ty:: ClosureKind :: FnOnce , _) => {
567
561
// no change needed
568
562
}
569
563
570
- ( ty:: ClosureKind :: Fn , ty:: ClosureKind :: FnMut ) |
571
- ( ty:: ClosureKind :: Fn , ty:: ClosureKind :: FnOnce ) |
572
- ( ty:: ClosureKind :: FnMut , ty:: ClosureKind :: FnOnce ) => {
564
+ ( ty:: ClosureKind :: Fn , ty:: ClosureKind :: FnMut )
565
+ | ( ty:: ClosureKind :: Fn , ty:: ClosureKind :: FnOnce )
566
+ | ( ty:: ClosureKind :: FnMut , ty:: ClosureKind :: FnOnce ) => {
573
567
// new kind is stronger than the old kind
574
568
self . current_closure_kind = new_kind;
575
569
self . current_origin = Some ( ( upvar_span, var_name) ) ;
@@ -590,12 +584,20 @@ impl<'a, 'gcx, 'tcx> euv::Delegate<'tcx> for InferBorrowKind<'a, 'gcx, 'tcx> {
590
584
self . adjust_upvar_borrow_kind_for_consume ( cmt, mode) ;
591
585
}
592
586
593
- fn matched_pat ( & mut self , _matched_pat : & hir:: Pat , _cmt : & mc:: cmt_ < ' tcx > ,
594
- _mode : euv:: MatchMode ) {
587
+ fn matched_pat (
588
+ & mut self ,
589
+ _matched_pat : & hir:: Pat ,
590
+ _cmt : & mc:: cmt_ < ' tcx > ,
591
+ _mode : euv:: MatchMode ,
592
+ ) {
595
593
}
596
594
597
- fn consume_pat ( & mut self , _consume_pat : & hir:: Pat , cmt : & mc:: cmt_ < ' tcx > ,
598
- mode : euv:: ConsumeMode ) {
595
+ fn consume_pat (
596
+ & mut self ,
597
+ _consume_pat : & hir:: Pat ,
598
+ cmt : & mc:: cmt_ < ' tcx > ,
599
+ mode : euv:: ConsumeMode ,
600
+ ) {
599
601
debug ! ( "consume_pat(cmt={:?},mode={:?})" , cmt, mode) ;
600
602
self . adjust_upvar_borrow_kind_for_consume ( cmt, mode) ;
601
603
}
@@ -611,9 +613,7 @@ impl<'a, 'gcx, 'tcx> euv::Delegate<'tcx> for InferBorrowKind<'a, 'gcx, 'tcx> {
611
613
) {
612
614
debug ! (
613
615
"borrow(borrow_id={}, cmt={:?}, bk={:?})" ,
614
- borrow_id,
615
- cmt,
616
- bk
616
+ borrow_id, cmt, bk
617
617
) ;
618
618
619
619
match bk {
0 commit comments