diff options
| author | bors <bors@rust-lang.org> | 2019-10-28 04:21:44 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2019-10-28 04:21:44 +0000 |
| commit | 9285d401a6070094747465962bc49969b93e14c5 (patch) | |
| tree | 6380d967e96679b26297a1c8a2adc7641f65551e /src/libsyntax/parse | |
| parent | 95f437b3cfb2fec966d7eaf69d7c2e36f9c274d1 (diff) | |
| parent | 606743e8c70821d2aaaf4886d601f1bf96884ce2 (diff) | |
Auto merge of #65885 - Centril:rollup-y6b2qbf, r=Centril
Rollup of 6 pull requests Successful merges: - #64747 (Stabilize `Option::flatten`) - #65664 (`std::panic::Location` is a lang_item, add `core::intrinsics::caller_location` (RFC 2091 3/N)) - #65792 (rustc, rustc_passes: reduce deps on rustc_expand) - #65849 (librustc_lexer: Enhance documentation) - #65873 (doc: explain why it is unsafe to construct Vec<u8> from Vec<u16>) - #65880 (Gather together usefulness tests) Failed merges: r? @ghost
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)) { |
