diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2014-11-03 15:29:46 -0800 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2014-11-03 15:55:59 -0800 |
| commit | 2659b2e88503ad63f59ccfb83f693eb856249856 (patch) | |
| tree | 809594fa7f0d4d5e1c1b14fa2d16a5bbb81cfa0d /src/libsyntax/parse | |
| parent | e98172d801c0d33fd0f8ca2d531c607e09c06b30 (diff) | |
| parent | 3ceb0112ef307d4d280dda8aca4aa7d4a34eb3f6 (diff) | |
| download | rust-2659b2e88503ad63f59ccfb83f693eb856249856.tar.gz rust-2659b2e88503ad63f59ccfb83f693eb856249856.zip | |
rollup merge of #18562 : nick29581/dxr-1
Diffstat (limited to 'src/libsyntax/parse')
| -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 37b9a0793b4..8ad5bdac7e2 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) |
