diff options
| author | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2019-12-02 21:56:11 +0300 |
|---|---|---|
| committer | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2019-12-02 22:13:13 +0300 |
| commit | 498737c8e9cf52be1bde3bef7ffa24a3d0540257 (patch) | |
| tree | d9138a2f9d99deec3d024bf9811702df66abdd70 | |
| parent | cf71538094b03c9c7116eceabc4985ab3b5e558a (diff) | |
| download | rust-498737c8e9cf52be1bde3bef7ffa24a3d0540257.tar.gz rust-498737c8e9cf52be1bde3bef7ffa24a3d0540257.zip | |
Address review comments
| -rw-r--r-- | src/librustc_parse/lib.rs | 2 | ||||
| -rw-r--r-- | src/librustc_parse/parser/mod.rs | 3 | ||||
| -rw-r--r-- | src/libsyntax/ast.rs | 22 |
3 files changed, 17 insertions, 10 deletions
diff --git a/src/librustc_parse/lib.rs b/src/librustc_parse/lib.rs index 3924da5ca67..a22b383e5f3 100644 --- a/src/librustc_parse/lib.rs +++ b/src/librustc_parse/lib.rs @@ -277,6 +277,8 @@ pub fn parse_in_attr<'a, T>( ) -> PResult<'a, T> { let mut parser = Parser::new( sess, + // FIXME(#66940, Centril | petrochenkov): refactor this function so it doesn't + // require reconstructing and immediately re-parsing delimiters. attr.get_normal_item().args.outer_tokens(), None, false, diff --git a/src/librustc_parse/parser/mod.rs b/src/librustc_parse/parser/mod.rs index a5cacc110ce..28689720044 100644 --- a/src/librustc_parse/parser/mod.rs +++ b/src/librustc_parse/parser/mod.rs @@ -1024,7 +1024,8 @@ impl<'a> Parser<'a> { self.check(&token::OpenDelim(DelimToken::Brace)) { match self.parse_token_tree() { TokenTree::Delimited(dspan, delim, tokens) => - MacArgs::Delimited(dspan, MacDelimiter::from_token(delim), tokens), + // We've confirmed above that there is a delimiter so unwrapping is OK. + MacArgs::Delimited(dspan, MacDelimiter::from_token(delim).unwrap(), tokens), _ => unreachable!(), } } else if !delimited_only { diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index 3ddc001145c..8018e005b12 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -1396,8 +1396,12 @@ pub enum MacArgs { /// Delimited arguments - `#[attr()/[]/{}]` or `mac!()/[]/{}`. Delimited(DelimSpan, MacDelimiter, TokenStream), /// Arguments of a key-value attribute - `#[attr = "value"]`. - /// Span belongs to the `=` token, token stream is the "value". - Eq(Span, TokenStream), + Eq( + /// Span of the `=` token. + Span, + /// Token stream of the "value". + TokenStream, + ), } impl MacArgs { @@ -1421,13 +1425,13 @@ impl MacArgs { pub fn inner_tokens(&self) -> TokenStream { match self { MacArgs::Empty => TokenStream::default(), - MacArgs::Delimited(.., tokens) => tokens.clone(), + MacArgs::Delimited(.., tokens) | MacArgs::Eq(.., tokens) => tokens.clone(), } } /// Tokens together with the delimiters or `=`. - /// Use of this functions generally means that something suboptimal or hacky is happening. + /// Use of this method generally means that something suboptimal or hacky is happening. pub fn outer_tokens(&self) -> TokenStream { match *self { MacArgs::Empty => TokenStream::default(), @@ -1461,12 +1465,12 @@ impl MacDelimiter { } } - pub fn from_token(delim: DelimToken) -> MacDelimiter { + pub fn from_token(delim: DelimToken) -> Option<MacDelimiter> { match delim { - token::Paren => MacDelimiter::Parenthesis, - token::Bracket => MacDelimiter::Bracket, - token::Brace => MacDelimiter::Brace, - token::NoDelim => panic!("expected a delimiter"), + token::Paren => Some(MacDelimiter::Parenthesis), + token::Bracket => Some(MacDelimiter::Bracket), + token::Brace => Some(MacDelimiter::Brace), + token::NoDelim => None, } } } |
