Skip to content

Commit a12b5c3

Browse files
committed
---
yaml --- r: 97134 b: refs/heads/dist-snap c: 1b8391c h: refs/heads/master v: v3
1 parent dfc8bc9 commit a12b5c3

File tree

2 files changed

+31
-17
lines changed

2 files changed

+31
-17
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ refs/heads/try: c274a6888410ce3e357e014568b43310ed787d36
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
88
refs/heads/try2: 147ecfdd8221e4a4d4e090486829a06da1e0ca3c
9-
refs/heads/dist-snap: 1ded423505b4f36087912497b868acfccd02a7f7
9+
refs/heads/dist-snap: 1b8391ca12c5465a78673b0ba5ea4d338e487fb1
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503
1212
refs/heads/try3: 9387340aab40a73e8424c48fd42f0c521a4875c0

branches/dist-snap/src/librustc/middle/borrowck/move_data.rs

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ pub struct MoveData {
3838
path_map: HashMap<@LoanPath, MovePathIndex>,
3939

4040
/// Each move or uninitialized variable gets an entry here.
41-
moves: ~[Move],
41+
moves: RefCell<~[Move]>,
4242

4343
/// Assignments to a variable, like `x = foo`. These are assigned
4444
/// bits for dataflow, since we must track them to ensure that
@@ -167,7 +167,7 @@ impl MoveData {
167167
MoveData {
168168
paths: RefCell::new(~[]),
169169
path_map: HashMap::new(),
170-
moves: ~[],
170+
moves: RefCell::new(~[]),
171171
path_assignments: ~[],
172172
var_assignments: ~[],
173173
assignee_ids: HashSet::new(),
@@ -216,7 +216,8 @@ impl MoveData {
216216

217217
fn move_next_move(&self, index: MoveIndex) -> MoveIndex {
218218
//! Type safe indexing operator
219-
self.moves[*index].next_move
219+
let moves = self.moves.borrow();
220+
moves.get()[*index].next_move
220221
}
221222

222223
fn is_var_path(&self, index: MovePathIndex) -> bool {
@@ -349,17 +350,23 @@ impl MoveData {
349350
kind);
350351

351352
let path_index = self.move_path(tcx, lp);
352-
let move_index = MoveIndex(self.moves.len());
353+
let move_index = {
354+
let moves = self.moves.borrow();
355+
MoveIndex(moves.get().len())
356+
};
353357

354358
let next_move = self.path_first_move(path_index);
355359
self.set_path_first_move(path_index, move_index);
356360

357-
self.moves.push(Move {
358-
path: path_index,
359-
id: id,
360-
kind: kind,
361-
next_move: next_move
362-
});
361+
{
362+
let mut moves = self.moves.borrow_mut();
363+
moves.get().push(Move {
364+
path: path_index,
365+
id: id,
366+
kind: kind,
367+
next_move: next_move
368+
});
369+
}
363370
}
364371

365372
pub fn add_assignment(&mut self,
@@ -411,8 +418,11 @@ impl MoveData {
411418
* killed by scoping. See `doc.rs` for more details.
412419
*/
413420

414-
for (i, move) in self.moves.iter().enumerate() {
415-
dfcx_moves.add_gen(move.id, i);
421+
{
422+
let moves = self.moves.borrow();
423+
for (i, move) in moves.get().iter().enumerate() {
424+
dfcx_moves.add_gen(move.id, i);
425+
}
416426
}
417427

418428
for (i, assignment) in self.var_assignments.iter().enumerate() {
@@ -523,12 +533,14 @@ impl FlowedMoveData {
523533
body: &ast::Block)
524534
-> FlowedMoveData
525535
{
526-
let mut dfcx_moves =
536+
let mut dfcx_moves = {
537+
let moves = move_data.moves.borrow();
527538
DataFlowContext::new(tcx,
528539
method_map,
529540
MoveDataFlowOperator,
530541
id_range,
531-
move_data.moves.len());
542+
moves.get().len())
543+
};
532544
let mut dfcx_assign =
533545
DataFlowContext::new(tcx,
534546
method_map,
@@ -554,7 +566,8 @@ impl FlowedMoveData {
554566
*/
555567

556568
self.dfcx_moves.each_gen_bit_frozen(id, |index| {
557-
let move = &self.move_data.moves[index];
569+
let moves = self.move_data.moves.borrow();
570+
let move = &moves.get()[index];
558571
let moved_path = move.path;
559572
f(move, self.move_data.path_loan_path(moved_path))
560573
})
@@ -592,7 +605,8 @@ impl FlowedMoveData {
592605
let mut ret = true;
593606

594607
self.dfcx_moves.each_bit_on_entry_frozen(id, |index| {
595-
let move = &self.move_data.moves[index];
608+
let moves = self.move_data.moves.borrow();
609+
let move = &moves.get()[index];
596610
let moved_path = move.path;
597611
if base_indices.iter().any(|x| x == &moved_path) {
598612
// Scenario 1 or 2: `loan_path` or some base path of

0 commit comments

Comments
 (0)