Skip to content

Commit a7e3204

Browse files
committed
mir::dataflow arielb1 review feedback
* removed `on_all_children_bits`, rewriting calls to use `super::on_all_children_bits` * moved `fn path` helper routine out of `impl MirBorrowckCtxtPreDataflow`
1 parent 9c468f4 commit a7e3204

File tree

1 file changed

+32
-64
lines changed
  • src/librustc_borrowck/borrowck/mir/dataflow

1 file changed

+32
-64
lines changed

src/librustc_borrowck/borrowck/mir/dataflow/mod.rs

Lines changed: 32 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ use std::path::PathBuf;
1919
use std::usize;
2020

2121
use super::MirBorrowckCtxtPreDataflow;
22-
use super::gather_moves::{Location, MoveData, MovePathData, MovePathIndex, MoveOutIndex, PathMap};
22+
use super::gather_moves::{Location, MoveData, MovePathIndex, MoveOutIndex};
2323
use super::gather_moves::{MoveOut, MovePath};
2424
use super::DropFlagState;
2525

@@ -99,40 +99,6 @@ impl<'a, 'tcx: 'a, BD> DataflowAnalysis<'a, 'tcx, BD>
9999
}
100100
}
101101

102-
fn on_all_children_bits<Each>(path_map: &PathMap,
103-
move_paths: &MovePathData,
104-
move_path_index: MovePathIndex,
105-
mut each_child: Each)
106-
where Each: FnMut(MoveOutIndex)
107-
{
108-
return on_all_children_bits_recur(
109-
path_map, move_paths, move_path_index, &mut each_child);
110-
111-
fn on_all_children_bits_recur<Each>(path_map: &PathMap,
112-
move_paths: &MovePathData,
113-
move_path_index: MovePathIndex,
114-
each_child: &mut Each)
115-
where Each: FnMut(MoveOutIndex)
116-
{
117-
// 1. invoke `each_child` callback for all moves that directly
118-
// influence path for `move_path_index`
119-
for move_index in &path_map[move_path_index] {
120-
each_child(*move_index);
121-
}
122-
123-
// 2. for each child of the path (that is named in this
124-
// function), recur.
125-
//
126-
// (Unnamed children are irrelevant to dataflow; by
127-
// definition they have no associated moves.)
128-
let mut next_child_index = move_paths[move_path_index].first_child;
129-
while let Some(child_index) = next_child_index {
130-
on_all_children_bits_recur(path_map, move_paths, child_index, each_child);
131-
next_child_index = move_paths[child_index].next_sibling;
132-
}
133-
}
134-
}
135-
136102
impl<'b, 'a: 'b, 'tcx: 'a, BD> PropagationContext<'b, 'a, 'tcx, BD>
137103
where BD: BitDenotation, BD::Ctxt: HasMoveData<'tcx>
138104
{
@@ -161,23 +127,23 @@ impl<'b, 'a: 'b, 'tcx: 'a, BD> PropagationContext<'b, 'a, 'tcx, BD>
161127
}
162128
}
163129

130+
fn dataflow_path(context: &str, prepost: &str, path: &str) -> PathBuf {
131+
format!("{}_{}", context, prepost);
132+
let mut path = PathBuf::from(path);
133+
let new_file_name = {
134+
let orig_file_name = path.file_name().unwrap().to_str().unwrap();
135+
format!("{}_{}", context, orig_file_name)
136+
};
137+
path.set_file_name(new_file_name);
138+
path
139+
}
140+
164141
impl<'a, 'tcx: 'a, BD> MirBorrowckCtxtPreDataflow<'a, 'tcx, BD>
165142
where BD: BitDenotation, BD::Bit: Debug, BD::Ctxt: HasMoveData<'tcx>
166143
{
167-
fn path(context: &str, prepost: &str, path: &str) -> PathBuf {
168-
format!("{}_{}", context, prepost);
169-
let mut path = PathBuf::from(path);
170-
let new_file_name = {
171-
let orig_file_name = path.file_name().unwrap().to_str().unwrap();
172-
format!("{}_{}", context, orig_file_name)
173-
};
174-
path.set_file_name(new_file_name);
175-
path
176-
}
177-
178144
fn pre_dataflow_instrumentation(&self) -> io::Result<()> {
179145
if let Some(ref path_str) = self.print_preflow_to {
180-
let path = Self::path(BD::name(), "preflow", path_str);
146+
let path = dataflow_path(BD::name(), "preflow", path_str);
181147
graphviz::print_borrowck_graph_to(self, &path)
182148
} else {
183149
Ok(())
@@ -186,7 +152,7 @@ impl<'a, 'tcx: 'a, BD> MirBorrowckCtxtPreDataflow<'a, 'tcx, BD>
186152

187153
fn post_dataflow_instrumentation(&self) -> io::Result<()> {
188154
if let Some(ref path_str) = self.print_postflow_to {
189-
let path = Self::path(BD::name(), "postflow", path_str);
155+
let path = dataflow_path(BD::name(), "postflow", path_str);
190156
graphviz::print_borrowck_graph_to(self, &path)
191157
} else{
192158
Ok(())
@@ -746,9 +712,8 @@ impl<'a, 'tcx> BitDenotation for MovingOutStatements<'a, 'tcx> {
746712
sets: &mut BlockSets,
747713
bb: repr::BasicBlock,
748714
idx: usize) {
749-
let &(_tcx, mir, ref move_data) = ctxt;
715+
let &(tcx, mir, ref move_data) = ctxt;
750716
let stmt = &mir.basic_block_data(bb).statements[idx];
751-
let move_paths = &move_data.move_paths;
752717
let loc_map = &move_data.loc_map;
753718
let path_map = &move_data.path_map;
754719
let rev_lookup = &move_data.rev_lookup;
@@ -771,13 +736,14 @@ impl<'a, 'tcx> BitDenotation for MovingOutStatements<'a, 'tcx> {
771736
let move_path_index = rev_lookup.find(lvalue);
772737

773738
sets.kill_set.set_bit(move_path_index.idx());
774-
on_all_children_bits(path_map,
775-
move_paths,
776-
move_path_index,
777-
|moi| {
778-
assert!(moi.idx() < bits_per_block);
779-
sets.kill_set.set_bit(moi.idx());
780-
});
739+
super::on_all_children_bits(tcx,
740+
mir,
741+
move_data,
742+
move_path_index,
743+
|mpi| for moi in &path_map[mpi] {
744+
assert!(moi.idx() < bits_per_block);
745+
sets.kill_set.set_bit(moi.idx());
746+
});
781747
}
782748
}
783749
}
@@ -812,13 +778,15 @@ impl<'a, 'tcx> BitDenotation for MovingOutStatements<'a, 'tcx> {
812778
let bits_per_block = self.bits_per_block(ctxt);
813779

814780
in_out.clear_bit(move_path_index.idx());
815-
on_all_children_bits(&move_data.path_map,
816-
&move_data.move_paths,
817-
move_path_index,
818-
|moi| {
819-
assert!(moi.idx() < bits_per_block);
820-
in_out.clear_bit(moi.idx());
821-
});
781+
let path_map = &move_data.path_map;
782+
super::on_all_children_bits(ctxt.0,
783+
ctxt.1,
784+
move_data,
785+
move_path_index,
786+
|mpi| for moi in &path_map[mpi] {
787+
assert!(moi.idx() < bits_per_block);
788+
in_out.clear_bit(moi.idx());
789+
});
822790
}
823791
}
824792

0 commit comments

Comments
 (0)