diff options
| author | Nick Cameron <ncameron@mozilla.com> | 2014-11-03 17:52:00 +1300 |
|---|---|---|
| committer | Nick Cameron <ncameron@mozilla.com> | 2014-11-03 17:52:00 +1300 |
| commit | 3ceb0112ef307d4d280dda8aca4aa7d4a34eb3f6 (patch) | |
| tree | d891f1afdb8c2e0ccc35dba7425486fbaa625980 /src/libsyntax | |
| parent | dcc5c3b31b294a19c369e7b1926528610230686d (diff) | |
| download | rust-3ceb0112ef307d4d280dda8aca4aa7d4a34eb3f6.tar.gz rust-3ceb0112ef307d4d280dda8aca4aa7d4a34eb3f6.zip | |
Ignore whitespace tokens when re-computing spans in save_analysis
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/parse/lexer/mod.rs | 13 | ||||
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 20 |
2 files changed, 16 insertions, 17 deletions
diff --git a/src/libsyntax/parse/lexer/mod.rs b/src/libsyntax/parse/lexer/mod.rs index 293b91111b5..1bc1d42d888 100644 --- a/src/libsyntax/parse/lexer/mod.rs +++ b/src/libsyntax/parse/lexer/mod.rs @@ -35,6 +35,19 @@ pub trait Reader { /// Report a non-fatal error with the current span. fn err(&self, &str); fn peek(&self) -> TokenAndSpan; + /// Get a token the parser cares about. + fn real_token(&mut self) -> TokenAndSpan { + let mut t = self.next_token(); + loop { + match t.tok { + token::Whitespace | token::Comment | token::Shebang(_) => { + t = self.next_token(); + }, + _ => break + } + } + t + } } #[deriving(Clone, PartialEq, Eq, Show)] diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index aa3b9668d46..e3157d7ac75 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -338,27 +338,13 @@ fn is_plain_ident_or_underscore(t: &token::Token) -> bool { t.is_plain_ident() || *t == token::Underscore } -/// Get a token the parser cares about -fn real_token(rdr: &mut Reader) -> TokenAndSpan { - let mut t = rdr.next_token(); - loop { - match t.tok { - token::Whitespace | token::Comment | token::Shebang(_) => { - t = rdr.next_token(); - }, - _ => break - } - } - t -} - impl<'a> Parser<'a> { pub fn new(sess: &'a ParseSess, cfg: ast::CrateConfig, mut rdr: Box<Reader+'a>) -> Parser<'a> { - let tok0 = real_token(&mut *rdr); + let tok0 = rdr.real_token(); let span = tok0.sp; let placeholder = TokenAndSpan { tok: token::Underscore, @@ -898,7 +884,7 @@ impl<'a> Parser<'a> { None }; let next = if self.buffer_start == self.buffer_end { - real_token(&mut *self.reader) + self.reader.real_token() } else { // Avoid token copies with `replace`. let buffer_start = self.buffer_start as uint; @@ -942,7 +928,7 @@ impl<'a> Parser<'a> { -> R { let dist = distance as int; while self.buffer_length() < dist { - self.buffer[self.buffer_end as uint] = real_token(&mut *self.reader); + self.buffer[self.buffer_end as uint] = self.reader.real_token(); self.buffer_end = (self.buffer_end + 1) & 3; } f(&self.buffer[((self.buffer_start + dist - 1) & 3) as uint].tok) |
