From e913d692117e57ea2908461865aa08037f0bd2b9 Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Tue, 8 May 2018 19:58:54 +1000 Subject: Remove `StringReader::col`. 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. --- src/libsyntax/parse/lexer/comments.rs | 14 +++++++++++++- src/libsyntax/parse/lexer/mod.rs | 6 ------ 2 files changed, 13 insertions(+), 7 deletions(-) (limited to 'src/libsyntax/parse') diff --git a/src/libsyntax/parse/lexer/comments.rs b/src/libsyntax/parse/lexer/comments.rs index 63aa5d28ce8..672b0b9bbd1 100644 --- a/src/libsyntax/parse/lexer/comments.rs +++ b/src/libsyntax/parse/lexer/comments.rs @@ -238,7 +238,19 @@ fn read_block_comment(rdr: &mut StringReader, debug!(">>> block comment"); let p = rdr.pos; let mut lines: Vec = 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(); diff --git a/src/libsyntax/parse/lexer/mod.rs b/src/libsyntax/parse/lexer/mod.rs index 3968b7f113b..566e0c213b1 100644 --- a/src/libsyntax/parse/lexer/mod.rs +++ b/src/libsyntax/parse/lexer/mod.rs @@ -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, pub filemap: Lrc, @@ -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(), @@ -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 { -- cgit 1.4.1-3-g733a5