diff options
| author | Simon Sapin <simon.sapin@exyr.org> | 2014-06-18 00:06:26 +0200 |
|---|---|---|
| committer | Simon Sapin <simon.sapin@exyr.org> | 2014-06-18 00:15:24 +0200 |
| commit | 8de2618182f14bb2245e8e89f171aaf9b2f29690 (patch) | |
| tree | 52c91850c5f9117d5defe552fd1b246443d55077 /src/libsyntax/parse/lexer | |
| parent | 612bbaf7a07fe247e5e2d057cc4f10742918ead0 (diff) | |
| download | rust-8de2618182f14bb2245e8e89f171aaf9b2f29690.tar.gz rust-8de2618182f14bb2245e8e89f171aaf9b2f29690.zip | |
Fix some violations of stronger guarantees for mutable borrows.
See 159e27aebb940926ccf1bad0b2b12087d36ad903
Diffstat (limited to 'src/libsyntax/parse/lexer')
| -rw-r--r-- | src/libsyntax/parse/lexer/mod.rs | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/src/libsyntax/parse/lexer/mod.rs b/src/libsyntax/parse/lexer/mod.rs index f67b77d64dd..9039f346edb 100644 --- a/src/libsyntax/parse/lexer/mod.rs +++ b/src/libsyntax/parse/lexer/mod.rs @@ -906,8 +906,9 @@ impl<'a> StringReader<'a> { // Byte offsetting here is okay because the // character before position `start` are an // ascii single quote and ascii 'b'. + let last_pos = self_.last_pos; self_.fatal_span_verbose( - start - BytePos(2), self_.last_pos, + start - BytePos(2), last_pos, "unterminated byte constant".to_string()); } self_.bump(); // advance curr past token @@ -920,7 +921,8 @@ impl<'a> StringReader<'a> { let mut value = Vec::new(); while !self_.curr_is('"') { if self_.is_eof() { - self_.fatal_span(start, self_.last_pos, + let last_pos = self_.last_pos; + self_.fatal_span(start, last_pos, "unterminated double quote byte string"); } @@ -944,20 +946,25 @@ impl<'a> StringReader<'a> { } if self_.is_eof() { - self_.fatal_span(start_bpos, self_.last_pos, "unterminated raw string"); + let last_pos = self_.last_pos; + self_.fatal_span(start_bpos, last_pos, "unterminated raw string"); } else if !self_.curr_is('"') { - self_.fatal_span_char(start_bpos, self_.last_pos, + let last_pos = self_.last_pos; + let ch = self_.curr.unwrap(); + self_.fatal_span_char(start_bpos, last_pos, "only `#` is allowed in raw string delimitation; \ found illegal character", - self_.curr.unwrap()); + ch); } self_.bump(); let content_start_bpos = self_.last_pos; let mut content_end_bpos; 'outer: loop { match self_.curr { - None => self_.fatal_span(start_bpos, self_.last_pos, - "unterminated raw string"), + None => { + let last_pos = self_.last_pos; + self_.fatal_span(start_bpos, last_pos, "unterminated raw string") + }, Some('"') => { content_end_bpos = self_.last_pos; for _ in range(0, hash_count) { @@ -969,8 +976,9 @@ impl<'a> StringReader<'a> { break; }, Some(c) => if c > '\x7F' { - self_.err_span_char(self_.last_pos, self_.last_pos, - "raw byte string must be ASCII", c); + let last_pos = self_.last_pos; + self_.err_span_char( + last_pos, last_pos, "raw byte string must be ASCII", c); } } self_.bump(); |
