@@ -268,13 +268,13 @@ impl FileMap {
268
268
}
269
269
270
270
pub struct CodeMap {
271
- files : @ mut ~[ @FileMap ]
271
+ files : RefCell < ~[ @FileMap ] >
272
272
}
273
273
274
274
impl CodeMap {
275
275
pub fn new ( ) -> CodeMap {
276
276
CodeMap {
277
- files : @ mut ~[ ] ,
277
+ files : RefCell :: new ( ~[ ] ) ,
278
278
}
279
279
}
280
280
@@ -288,12 +288,12 @@ impl CodeMap {
288
288
substr : FileSubstr ,
289
289
src : @str )
290
290
-> @FileMap {
291
- let files = & mut * self . files ;
292
- let start_pos = if files. len ( ) == 0 {
291
+ let mut files = self . files . borrow_mut ( ) ;
292
+ let start_pos = if files. get ( ) . len ( ) == 0 {
293
293
0
294
294
} else {
295
- let last_start = files. last ( ) . start_pos . to_uint ( ) ;
296
- let last_len = files. last ( ) . src . len ( ) ;
295
+ let last_start = files. get ( ) . last ( ) . start_pos . to_uint ( ) ;
296
+ let last_len = files. get ( ) . last ( ) . src . len ( ) ;
297
297
last_start + last_len
298
298
} ;
299
299
@@ -304,7 +304,7 @@ impl CodeMap {
304
304
multibyte_chars : RefCell :: new ( ~[ ] ) ,
305
305
} ;
306
306
307
- files. push ( filemap) ;
307
+ files. get ( ) . push ( filemap) ;
308
308
309
309
return filemap;
310
310
}
@@ -350,9 +350,11 @@ impl CodeMap {
350
350
}
351
351
352
352
pub fn span_to_str ( & self , sp : Span ) -> ~str {
353
- let files = & * self . files ;
354
- if files. len ( ) == 0 && sp == DUMMY_SP {
355
- return ~"no-location";
353
+ {
354
+ let files = self . files . borrow ( ) ;
355
+ if files. get ( ) . len ( ) == 0 && sp == DUMMY_SP {
356
+ return ~"no-location";
357
+ }
356
358
}
357
359
358
360
let lo = self . lookup_char_pos_adj ( sp. lo ) ;
@@ -392,7 +394,12 @@ impl CodeMap {
392
394
}
393
395
394
396
pub fn get_filemap ( & self , filename : & str ) -> @FileMap {
395
- for fm in self . files . iter ( ) { if filename == fm. name { return * fm; } }
397
+ let files = self . files . borrow ( ) ;
398
+ for fm in files. get ( ) . iter ( ) {
399
+ if filename == fm. name {
400
+ return * fm
401
+ }
402
+ }
396
403
//XXjdm the following triggers a mismatched type bug
397
404
// (or expected function, found _|_)
398
405
fail ! ( ) ; // ("asking for " + filename + " which we don't know about");
@@ -401,13 +408,14 @@ impl CodeMap {
401
408
402
409
impl CodeMap {
403
410
fn lookup_filemap_idx ( & self , pos : BytePos ) -> uint {
404
- let files = & * self . files ;
411
+ let files = self . files . borrow ( ) ;
412
+ let files = files. get ( ) ;
405
413
let len = files. len ( ) ;
406
414
let mut a = 0 u;
407
415
let mut b = len;
408
416
while b - a > 1 u {
409
417
let m = ( a + b) / 2 u;
410
- if self . files [ m] . start_pos > pos {
418
+ if files[ m] . start_pos > pos {
411
419
b = m;
412
420
} else {
413
421
a = m;
@@ -423,7 +431,9 @@ impl CodeMap {
423
431
fn lookup_line ( & self , pos : BytePos ) -> FileMapAndLine
424
432
{
425
433
let idx = self . lookup_filemap_idx ( pos) ;
426
- let f = self . files [ idx] ;
434
+
435
+ let files = self . files . borrow ( ) ;
436
+ let f = files. get ( ) [ idx] ;
427
437
let mut a = 0 u;
428
438
let mut lines = f. lines . borrow_mut ( ) ;
429
439
let mut b = lines. get ( ) . len ( ) ;
@@ -457,7 +467,8 @@ impl CodeMap {
457
467
fn lookup_byte_offset ( & self , bpos : BytePos )
458
468
-> FileMapAndBytePos {
459
469
let idx = self . lookup_filemap_idx ( bpos) ;
460
- let fm = self . files [ idx] ;
470
+ let files = self . files . borrow ( ) ;
471
+ let fm = files. get ( ) [ idx] ;
461
472
let offset = bpos - fm. start_pos ;
462
473
return FileMapAndBytePos { fm : fm, pos : offset} ;
463
474
}
@@ -467,7 +478,8 @@ impl CodeMap {
467
478
fn bytepos_to_local_charpos ( & self , bpos : BytePos ) -> CharPos {
468
479
debug ! ( "codemap: converting {:?} to char pos" , bpos) ;
469
480
let idx = self . lookup_filemap_idx ( bpos) ;
470
- let map = self . files [ idx] ;
481
+ let files = self . files . borrow ( ) ;
482
+ let map = files. get ( ) [ idx] ;
471
483
472
484
// The number of extra bytes due to multibyte chars in the FileMap
473
485
let mut total_extra_bytes = 0 ;
0 commit comments