diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-10-28 04:53:07 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-10-28 04:53:07 +0100 |
| commit | 83260d5c4370679f145d5cebb471f91e81771ee2 (patch) | |
| tree | 13e688558e3481acb9efbd6d8a217dc6f9deaa36 /src/libsyntax/parse | |
| parent | 4728d66206c82c98aa4e1fad751e8aae7489c242 (diff) | |
| parent | fb12c708521d66b1f727ad4c1ec752a78799980d (diff) | |
| download | rust-83260d5c4370679f145d5cebb471f91e81771ee2.tar.gz rust-83260d5c4370679f145d5cebb471f91e81771ee2.zip | |
Rollup merge of #65792 - Centril:split-syntax-2, r=petrochenkov
rustc, rustc_passes: reduce deps on rustc_expand Part of #65324. r? @petrochenkov
Diffstat (limited to 'src/libsyntax/parse')
| -rw-r--r-- | src/libsyntax/parse/mod.rs | 21 | ||||
| -rw-r--r-- | src/libsyntax/parse/parser/path.rs | 2 |
2 files changed, 22 insertions, 1 deletions
diff --git a/src/libsyntax/parse/mod.rs b/src/libsyntax/parse/mod.rs index e6ddf8778cc..f5e416b722b 100644 --- a/src/libsyntax/parse/mod.rs +++ b/src/libsyntax/parse/mod.rs @@ -288,6 +288,27 @@ pub fn stream_to_parser_with_base_dir<'a>( Parser::new(sess, stream, Some(base_dir), true, false, None) } +/// Runs the given subparser `f` on the tokens of the given `attr`'s item. +pub fn parse_in_attr<'a, T>( + sess: &'a ParseSess, + attr: &ast::Attribute, + mut f: impl FnMut(&mut Parser<'a>) -> PResult<'a, T>, +) -> PResult<'a, T> { + let mut parser = Parser::new( + sess, + attr.tokens.clone(), + None, + false, + false, + Some("attribute"), + ); + let result = f(&mut parser)?; + if parser.token != token::Eof { + parser.unexpected()?; + } + Ok(result) +} + // NOTE(Centril): The following probably shouldn't be here but it acknowledges the // fact that architecturally, we are using parsing (read on below to understand why). diff --git a/src/libsyntax/parse/parser/path.rs b/src/libsyntax/parse/parser/path.rs index 77709a22953..38a28224dab 100644 --- a/src/libsyntax/parse/parser/path.rs +++ b/src/libsyntax/parse/parser/path.rs @@ -130,7 +130,7 @@ impl<'a> Parser<'a> { } /// Parse a list of paths inside `#[derive(path_0, ..., path_n)]`. - crate fn parse_derive_paths(&mut self) -> PResult<'a, Vec<Path>> { + pub fn parse_derive_paths(&mut self) -> PResult<'a, Vec<Path>> { self.expect(&token::OpenDelim(token::Paren))?; let mut list = Vec::new(); while !self.eat(&token::CloseDelim(token::Paren)) { |
