@@ -35,7 +35,7 @@ pub struct MoveData {
35
35
paths : RefCell < ~[ MovePath ] > ,
36
36
37
37
/// Cache of loan path to move path index, for easy lookup.
38
- path_map : HashMap < @LoanPath , MovePathIndex > ,
38
+ path_map : RefCell < HashMap < @LoanPath , MovePathIndex > > ,
39
39
40
40
/// Each move or uninitialized variable gets an entry here.
41
41
moves : RefCell < ~[ Move ] > ,
@@ -166,7 +166,7 @@ impl MoveData {
166
166
pub fn new ( ) -> MoveData {
167
167
MoveData {
168
168
paths : RefCell :: new ( ~[ ] ) ,
169
- path_map : HashMap :: new ( ) ,
169
+ path_map : RefCell :: new ( HashMap :: new ( ) ) ,
170
170
moves : RefCell :: new ( ~[ ] ) ,
171
171
path_assignments : ~[ ] ,
172
172
var_assignments : ~[ ] ,
@@ -234,11 +234,14 @@ impl MoveData {
234
234
* base paths that do not yet have an index.
235
235
*/
236
236
237
- match self . path_map . find ( & lp) {
238
- Some ( & index) => {
239
- return index;
237
+ {
238
+ let path_map = self . path_map . borrow ( ) ;
239
+ match path_map. get ( ) . find ( & lp) {
240
+ Some ( & index) => {
241
+ return index;
242
+ }
243
+ None => { }
240
244
}
241
- None => { }
242
245
}
243
246
244
247
let index = match * lp {
@@ -289,14 +292,17 @@ impl MoveData {
289
292
290
293
let paths = self . paths . borrow ( ) ;
291
294
assert_eq ! ( * index, paths. get( ) . len( ) - 1 ) ;
292
- self . path_map . insert ( lp, index) ;
295
+
296
+ let mut path_map = self . path_map . borrow_mut ( ) ;
297
+ path_map. get ( ) . insert ( lp, index) ;
293
298
return index;
294
299
}
295
300
296
301
fn existing_move_path ( & self ,
297
302
lp : @LoanPath )
298
303
-> Option < MovePathIndex > {
299
- self . path_map . find_copy ( & lp)
304
+ let path_map = self . path_map . borrow ( ) ;
305
+ path_map. get ( ) . find_copy ( & lp)
300
306
}
301
307
302
308
fn existing_base_paths ( & self ,
@@ -315,7 +321,11 @@ impl MoveData {
315
321
* paths of `lp` to `result`, but does not add new move paths
316
322
*/
317
323
318
- match self . path_map . find_copy ( & lp) {
324
+ let index_opt = {
325
+ let path_map = self . path_map . borrow ( ) ;
326
+ path_map. get ( ) . find_copy ( & lp)
327
+ } ;
328
+ match index_opt {
319
329
Some ( index) => {
320
330
self . each_base_path ( index, |p| {
321
331
result. push ( p) ;
@@ -442,7 +452,10 @@ impl MoveData {
442
452
match * path. loan_path {
443
453
LpVar ( id) => {
444
454
let kill_id = tcx. region_maps . encl_scope ( id) ;
445
- let path = * self . path_map . get ( & path. loan_path ) ;
455
+ let path = {
456
+ let path_map = self . path_map . borrow ( ) ;
457
+ * path_map. get ( ) . get ( & path. loan_path )
458
+ } ;
446
459
self . kill_moves ( path, kill_id, dfcx_moves) ;
447
460
}
448
461
LpExtend ( ..) => { }
0 commit comments