diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2014-03-20 11:21:17 -0700 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2014-03-20 18:51:52 -0700 |
| commit | 84a91b860330c2b83fd0546b33a949079d422166 (patch) | |
| tree | 1ef0a81e5d7d6c076ac9669a16fab8faa3c80b34 /src/libsyntax/parse/lexer.rs | |
| parent | 4e00cf613428d24d305a89e4f8e79b70ea8e8322 (diff) | |
| download | rust-84a91b860330c2b83fd0546b33a949079d422166.tar.gz rust-84a91b860330c2b83fd0546b33a949079d422166.zip | |
syntax: Tidy up parsing the new attribute syntax
Diffstat (limited to 'src/libsyntax/parse/lexer.rs')
| -rw-r--r-- | src/libsyntax/parse/lexer.rs | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/src/libsyntax/parse/lexer.rs b/src/libsyntax/parse/lexer.rs index 061d460af5e..ca2fbd24587 100644 --- a/src/libsyntax/parse/lexer.rs +++ b/src/libsyntax/parse/lexer.rs @@ -18,9 +18,10 @@ use parse::token::{str_to_ident}; use std::cell::{Cell, RefCell}; use std::char; -use std::rc::Rc; use std::mem::replace; use std::num::from_str_radix; +use std::rc::Rc; +use std::str; pub use ext::tt::transcribe::{TtReader, new_tt_reader}; @@ -272,16 +273,6 @@ pub fn bump(rdr: &StringReader) { } } -// EFFECT: Peek 'n' characters ahead. -pub fn peek(rdr: &StringReader, n: uint) -> Option<char> { - let offset = byte_offset(rdr, rdr.pos.get()).to_uint() + (n - 1); - if offset < (rdr.filemap.src).len() { - Some(rdr.filemap.src.char_at(offset)) - } else { - None - } -} - pub fn is_eof(rdr: &StringReader) -> bool { rdr.curr.get().is_none() } @@ -298,6 +289,21 @@ pub fn nextch_is(rdr: &StringReader, c: char) -> bool { nextch(rdr) == Some(c) } +pub fn nextnextch(rdr: &StringReader) -> Option<char> { + let offset = byte_offset(rdr, rdr.pos.get()).to_uint(); + let s = rdr.filemap.deref().src.as_slice(); + if offset >= s.len() { return None } + let str::CharRange { next, .. } = s.char_range_at(offset); + if next < s.len() { + Some(s.char_at(next)) + } else { + None + } +} +pub fn nextnextch_is(rdr: &StringReader, c: char) -> bool { + nextnextch(rdr) == Some(c) +} + fn hex_digit_val(c: Option<char>) -> int { let d = c.unwrap_or('\x00'); @@ -384,7 +390,7 @@ fn consume_any_line_comment(rdr: &StringReader) if nextch_is(rdr, '!') { // Parse an inner attribute. - if peek(rdr, 2).unwrap() == '[' { + if nextnextch_is(rdr, '[') { return None; } |
