Skip to content

Commit 4c85cf7

Browse files
committed
libsyntax: De-@mut CodeMap::files
1 parent 39f39ed commit 4c85cf7

File tree

4 files changed

+47
-21
lines changed

4 files changed

+47
-21
lines changed

src/librustc/driver/driver.rs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -464,9 +464,19 @@ fn write_out_deps(sess: Session, input: &input, outputs: &OutputFilenames, crate
464464

465465
// Build a list of files used to compile the output and
466466
// write Makefile-compatible dependency rules
467-
let files: ~[@str] = sess.codemap.files.iter()
468-
.filter_map(|fmap| if fmap.is_real_file() { Some(fmap.name) } else { None })
469-
.collect();
467+
let files: ~[@str] = {
468+
let files = sess.codemap.files.borrow();
469+
files.get()
470+
.iter()
471+
.filter_map(|fmap| {
472+
if fmap.is_real_file() {
473+
Some(fmap.name)
474+
} else {
475+
None
476+
}
477+
})
478+
.collect()
479+
};
470480
let mut file = io::File::create(&deps_filename);
471481
for path in out_filenames.iter() {
472482
write!(&mut file as &mut Writer,

src/libsyntax/codemap.rs

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -268,13 +268,13 @@ impl FileMap {
268268
}
269269

270270
pub struct CodeMap {
271-
files: @mut ~[@FileMap]
271+
files: RefCell<~[@FileMap]>
272272
}
273273

274274
impl CodeMap {
275275
pub fn new() -> CodeMap {
276276
CodeMap {
277-
files: @mut ~[],
277+
files: RefCell::new(~[]),
278278
}
279279
}
280280

@@ -288,12 +288,12 @@ impl CodeMap {
288288
substr: FileSubstr,
289289
src: @str)
290290
-> @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 {
293293
0
294294
} 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();
297297
last_start + last_len
298298
};
299299

@@ -304,7 +304,7 @@ impl CodeMap {
304304
multibyte_chars: RefCell::new(~[]),
305305
};
306306

307-
files.push(filemap);
307+
files.get().push(filemap);
308308

309309
return filemap;
310310
}
@@ -350,9 +350,11 @@ impl CodeMap {
350350
}
351351

352352
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+
}
356358
}
357359

358360
let lo = self.lookup_char_pos_adj(sp.lo);
@@ -392,7 +394,12 @@ impl CodeMap {
392394
}
393395

394396
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+
}
396403
//XXjdm the following triggers a mismatched type bug
397404
// (or expected function, found _|_)
398405
fail!(); // ("asking for " + filename + " which we don't know about");
@@ -401,13 +408,14 @@ impl CodeMap {
401408

402409
impl CodeMap {
403410
fn lookup_filemap_idx(&self, pos: BytePos) -> uint {
404-
let files = &*self.files;
411+
let files = self.files.borrow();
412+
let files = files.get();
405413
let len = files.len();
406414
let mut a = 0u;
407415
let mut b = len;
408416
while b - a > 1u {
409417
let m = (a + b) / 2u;
410-
if self.files[m].start_pos > pos {
418+
if files[m].start_pos > pos {
411419
b = m;
412420
} else {
413421
a = m;
@@ -423,7 +431,9 @@ impl CodeMap {
423431
fn lookup_line(&self, pos: BytePos) -> FileMapAndLine
424432
{
425433
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];
427437
let mut a = 0u;
428438
let mut lines = f.lines.borrow_mut();
429439
let mut b = lines.get().len();
@@ -457,7 +467,8 @@ impl CodeMap {
457467
fn lookup_byte_offset(&self, bpos: BytePos)
458468
-> FileMapAndBytePos {
459469
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];
461472
let offset = bpos - fm.start_pos;
462473
return FileMapAndBytePos {fm: fm, pos: offset};
463474
}
@@ -467,7 +478,8 @@ impl CodeMap {
467478
fn bytepos_to_local_charpos(&self, bpos: BytePos) -> CharPos {
468479
debug!("codemap: converting {:?} to char pos", bpos);
469480
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];
471483

472484
// The number of extra bytes due to multibyte chars in the FileMap
473485
let mut total_extra_bytes = 0;

src/libsyntax/ext/source_util.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,8 @@ pub fn expand_include_str(cx: &mut ExtCtxt, sp: Span, tts: &[ast::token_tree])
109109
let s = s.to_managed();
110110
// Add this input file to the code map to make it available as
111111
// dependency information
112-
cx.parse_sess.cm.files.push(@codemap::FileMap {
112+
let mut files = cx.parse_sess.cm.files.borrow_mut();
113+
files.get().push(@codemap::FileMap {
113114
name: file.display().to_str().to_managed(),
114115
substr: codemap::FssNone,
115116
src: s,

src/libsyntax/parse/lexer.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,10 @@ fn consume_any_line_comment(rdr: @StringReader)
361361
// I guess this is the only way to figure out if
362362
// we're at the beginning of the file...
363363
let cmap = @CodeMap::new();
364-
(*cmap).files.push(rdr.filemap);
364+
{
365+
let mut files = cmap.files.borrow_mut();
366+
files.get().push(rdr.filemap);
367+
}
365368
let loc = cmap.lookup_char_pos_adj(rdr.last_pos.get());
366369
if loc.line == 1u && loc.col == CharPos(0u) {
367370
while rdr.curr.get() != '\n' && !is_eof(rdr) { bump(rdr); }

0 commit comments

Comments
 (0)