diff options
| author | bors <bors@rust-lang.org> | 2016-07-23 04:01:05 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2016-07-23 04:01:05 -0700 |
| commit | fd1d3603d46422bef6531a2d74401361ba1d822b (patch) | |
| tree | b06deb4e8b78caff6903dc36671e590ff269200f /src/libsyntax | |
| parent | ad264f7f39b6113fb87a489d72d31abbc03ab148 (diff) | |
| parent | 485e2df1b1fbd4acde8dbc5bfbdf7fed3acc227c (diff) | |
| download | rust-fd1d3603d46422bef6531a2d74401361ba1d822b.tar.gz rust-fd1d3603d46422bef6531a2d74401361ba1d822b.zip | |
Auto merge of #34925 - jseyfried:nested_macros, r=eddyb
Support nested `macro_rules!` Fixes #6994. r? @eddyb
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 125f1abb062..c143e190c6f 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -258,6 +258,7 @@ pub struct Parser<'a> { pub tokens_consumed: usize, pub restrictions: Restrictions, pub quote_depth: usize, // not (yet) related to the quasiquoter + parsing_token_tree: bool, pub reader: Box<Reader+'a>, /// The set of seen errors about obsolete syntax. Used to suppress /// extra detail when the same error is seen twice @@ -374,6 +375,7 @@ impl<'a> Parser<'a> { tokens_consumed: 0, restrictions: Restrictions::empty(), quote_depth: 0, + parsing_token_tree: false, obsolete_set: HashSet::new(), mod_path_stack: Vec::new(), filename: filename, @@ -2663,7 +2665,7 @@ impl<'a> Parser<'a> { } pub fn check_unknown_macro_variable(&mut self) { - if self.quote_depth == 0 { + if self.quote_depth == 0 && !self.parsing_token_tree { match self.token { token::SubstNt(name) => self.fatal(&format!("unknown macro variable `{}`", name)).emit(), @@ -2723,6 +2725,7 @@ impl<'a> Parser<'a> { Err(err) }, token::OpenDelim(delim) => { + let parsing_token_tree = ::std::mem::replace(&mut self.parsing_token_tree, true); // The span for beginning of the delimited section let pre_span = self.span; @@ -2787,6 +2790,7 @@ impl<'a> Parser<'a> { _ => {} } + self.parsing_token_tree = parsing_token_tree; Ok(TokenTree::Delimited(span, Rc::new(Delimited { delim: delim, open_span: open_span, |
