Skip to content

Commit

Permalink
Remove StringReader::col.
Browse files Browse the repository at this point in the history
It only has a single use, within code handling indented block comments.
We can replace that with the new `FileMap::col_pos()`, which computes
the col position (BytePos instead of CharPos) based on the record of the
last newline char (which we already record).

This is actually an improvement, because
`trim_whitespace_prefix_and_push_line()` was using `col`, which is a
`CharPos`, as a slice index, which is a byte/char confusion.
  • Loading branch information
nnethercote committed May 14, 2018
1 parent 444b770 commit e913d69
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 7 deletions.
14 changes: 13 additions & 1 deletion src/libsyntax/parse/lexer/comments.rs
Expand Up @@ -238,7 +238,19 @@ fn read_block_comment(rdr: &mut StringReader,
debug!(">>> block comment");
let p = rdr.pos;
let mut lines: Vec<String> = Vec::new();
let col = rdr.col;

// Count the number of chars since the start of the line by rescanning.
let mut src_index = rdr.src_index(rdr.filemap.line_begin_pos());
let end_src_index = rdr.src_index(rdr.pos);
assert!(src_index <= end_src_index);
let mut n = 0;
while src_index < end_src_index {
let c = char_at(&rdr.src, src_index);
src_index += c.len_utf8();
n += 1;
}
let col = CharPos(n);

rdr.bump();
rdr.bump();

Expand Down
6 changes: 0 additions & 6 deletions src/libsyntax/parse/lexer/mod.rs
Expand Up @@ -44,8 +44,6 @@ pub struct StringReader<'a> {
pub next_pos: BytePos,
/// The absolute offset within the codemap of the current character
pub pos: BytePos,
/// The column of the next character to read
pub col: CharPos,
/// The current character (which has been read from self.pos)
pub ch: Option<char>,
pub filemap: Lrc<syntax_pos::FileMap>,
Expand Down Expand Up @@ -175,7 +173,6 @@ impl<'a> StringReader<'a> {
sess,
next_pos: filemap.start_pos,
pos: filemap.start_pos,
col: CharPos(0),
ch: Some('\n'),
filemap,
end_src_index: src.len(),
Expand Down Expand Up @@ -442,9 +439,6 @@ impl<'a> StringReader<'a> {
if self.save_new_lines_and_multibyte {
self.filemap.next_line(self.next_pos);
}
self.col = CharPos(0);
} else {
self.col = self.col + CharPos(1);
}
if next_ch_len > 1 {
if self.save_new_lines_and_multibyte {
Expand Down
9 changes: 9 additions & 0 deletions src/libsyntax_pos/lib.rs
Expand Up @@ -971,6 +971,15 @@ impl FileMap {
lines.push(pos);
}

/// Return the BytePos of the beginning of the current line.
pub fn line_begin_pos(&self) -> BytePos {
let lines = self.lines.borrow();
match lines.last() {
Some(&line_pos) => line_pos,
None => self.start_pos,
}
}

/// Add externally loaded source.
/// If the hash of the input doesn't match or no input is supplied via None,
/// it is interpreted as an error and the corresponding enum variant is set.
Expand Down

0 comments on commit e913d69

Please sign in to comment.