1
1
use crate :: elaborate_drops:: DropFlagState ;
2
2
use rustc_middle:: mir:: { self , Body , Location , Terminator , TerminatorKind } ;
3
- use rustc_middle:: ty:: TyCtxt ;
4
3
use rustc_target:: abi:: VariantIdx ;
5
4
6
- use super :: indexes:: MovePathIndex ;
7
- use super :: move_paths:: { InitKind , LookupResult , MoveData } ;
5
+ use super :: move_paths:: { InitKind , LookupResult , MoveData , MovePathIndex } ;
8
6
use super :: MoveDataParamEnv ;
9
7
10
8
pub fn move_path_children_matching < ' tcx , F > (
30
28
}
31
29
32
30
pub fn on_lookup_result_bits < ' tcx , F > (
33
- tcx : TyCtxt < ' tcx > ,
34
- body : & Body < ' tcx > ,
35
31
move_data : & MoveData < ' tcx > ,
36
32
lookup_result : LookupResult ,
37
33
each_child : F ,
@@ -42,22 +38,18 @@ pub fn on_lookup_result_bits<'tcx, F>(
42
38
LookupResult :: Parent ( ..) => {
43
39
// access to untracked value - do not touch children
44
40
}
45
- LookupResult :: Exact ( e) => on_all_children_bits ( tcx , body , move_data, e, each_child) ,
41
+ LookupResult :: Exact ( e) => on_all_children_bits ( move_data, e, each_child) ,
46
42
}
47
43
}
48
44
49
45
pub fn on_all_children_bits < ' tcx , F > (
50
- tcx : TyCtxt < ' tcx > ,
51
- body : & Body < ' tcx > ,
52
46
move_data : & MoveData < ' tcx > ,
53
47
move_path_index : MovePathIndex ,
54
48
mut each_child : F ,
55
49
) where
56
50
F : FnMut ( MovePathIndex ) ,
57
51
{
58
52
fn on_all_children_bits < ' tcx , F > (
59
- tcx : TyCtxt < ' tcx > ,
60
- body : & Body < ' tcx > ,
61
53
move_data : & MoveData < ' tcx > ,
62
54
move_path_index : MovePathIndex ,
63
55
each_child : & mut F ,
@@ -68,15 +60,14 @@ pub fn on_all_children_bits<'tcx, F>(
68
60
69
61
let mut next_child_index = move_data. move_paths [ move_path_index] . first_child ;
70
62
while let Some ( child_index) = next_child_index {
71
- on_all_children_bits ( tcx , body , move_data, child_index, each_child) ;
63
+ on_all_children_bits ( move_data, child_index, each_child) ;
72
64
next_child_index = move_data. move_paths [ child_index] . next_sibling ;
73
65
}
74
66
}
75
- on_all_children_bits ( tcx , body , move_data, move_path_index, & mut each_child) ;
67
+ on_all_children_bits ( move_data, move_path_index, & mut each_child) ;
76
68
}
77
69
78
70
pub fn drop_flag_effects_for_function_entry < ' tcx , F > (
79
- tcx : TyCtxt < ' tcx > ,
80
71
body : & Body < ' tcx > ,
81
72
ctxt : & MoveDataParamEnv < ' tcx > ,
82
73
mut callback : F ,
@@ -87,14 +78,13 @@ pub fn drop_flag_effects_for_function_entry<'tcx, F>(
87
78
for arg in body. args_iter ( ) {
88
79
let place = mir:: Place :: from ( arg) ;
89
80
let lookup_result = move_data. rev_lookup . find ( place. as_ref ( ) ) ;
90
- on_lookup_result_bits ( tcx , body , move_data, lookup_result, |mpi| {
81
+ on_lookup_result_bits ( move_data, lookup_result, |mpi| {
91
82
callback ( mpi, DropFlagState :: Present )
92
83
} ) ;
93
84
}
94
85
}
95
86
96
87
pub fn drop_flag_effects_for_location < ' tcx , F > (
97
- tcx : TyCtxt < ' tcx > ,
98
88
body : & Body < ' tcx > ,
99
89
ctxt : & MoveDataParamEnv < ' tcx > ,
100
90
loc : Location ,
@@ -110,32 +100,25 @@ pub fn drop_flag_effects_for_location<'tcx, F>(
110
100
let path = mi. move_path_index ( move_data) ;
111
101
debug ! ( "moving out of path {:?}" , move_data. move_paths[ path] ) ;
112
102
113
- on_all_children_bits ( tcx , body , move_data, path, |mpi| callback ( mpi, DropFlagState :: Absent ) )
103
+ on_all_children_bits ( move_data, path, |mpi| callback ( mpi, DropFlagState :: Absent ) )
114
104
}
115
105
116
106
// Drop does not count as a move but we should still consider the variable uninitialized.
117
107
if let Some ( Terminator { kind : TerminatorKind :: Drop { place, .. } , .. } ) =
118
108
body. stmt_at ( loc) . right ( )
119
109
{
120
110
if let LookupResult :: Exact ( mpi) = move_data. rev_lookup . find ( place. as_ref ( ) ) {
121
- on_all_children_bits ( tcx, body, move_data, mpi, |mpi| {
122
- callback ( mpi, DropFlagState :: Absent )
123
- } )
111
+ on_all_children_bits ( move_data, mpi, |mpi| callback ( mpi, DropFlagState :: Absent ) )
124
112
}
125
113
}
126
114
127
115
debug ! ( "drop_flag_effects: assignment for location({:?})" , loc) ;
128
116
129
- for_location_inits ( tcx , body , move_data, loc, |mpi| callback ( mpi, DropFlagState :: Present ) ) ;
117
+ for_location_inits ( move_data, loc, |mpi| callback ( mpi, DropFlagState :: Present ) ) ;
130
118
}
131
119
132
- pub fn for_location_inits < ' tcx , F > (
133
- tcx : TyCtxt < ' tcx > ,
134
- body : & Body < ' tcx > ,
135
- move_data : & MoveData < ' tcx > ,
136
- loc : Location ,
137
- mut callback : F ,
138
- ) where
120
+ fn for_location_inits < ' tcx , F > ( move_data : & MoveData < ' tcx > , loc : Location , mut callback : F )
121
+ where
139
122
F : FnMut ( MovePathIndex ) ,
140
123
{
141
124
for ii in & move_data. init_loc_map [ loc] {
@@ -144,7 +127,7 @@ pub fn for_location_inits<'tcx, F>(
144
127
InitKind :: Deep => {
145
128
let path = init. path ;
146
129
147
- on_all_children_bits ( tcx , body , move_data, path, & mut callback)
130
+ on_all_children_bits ( move_data, path, & mut callback)
148
131
}
149
132
InitKind :: Shallow => {
150
133
let mpi = init. path ;
@@ -161,8 +144,6 @@ pub fn for_location_inits<'tcx, F>(
161
144
/// NOTE: If there are no move paths corresponding to an inactive variant,
162
145
/// `handle_inactive_variant` will not be called for that variant.
163
146
pub ( crate ) fn on_all_inactive_variants < ' tcx > (
164
- tcx : TyCtxt < ' tcx > ,
165
- body : & mir:: Body < ' tcx > ,
166
147
move_data : & MoveData < ' tcx > ,
167
148
enum_place : mir:: Place < ' tcx > ,
168
149
active_variant : VariantIdx ,
@@ -185,9 +166,7 @@ pub(crate) fn on_all_inactive_variants<'tcx>(
185
166
} ;
186
167
187
168
if variant_idx != active_variant {
188
- on_all_children_bits ( tcx, body, move_data, variant_mpi, |mpi| {
189
- handle_inactive_variant ( mpi)
190
- } ) ;
169
+ on_all_children_bits ( move_data, variant_mpi, |mpi| handle_inactive_variant ( mpi) ) ;
191
170
}
192
171
}
193
172
}
0 commit comments