diff options
| author | Huon Wilson <dbau.pp+github@gmail.com> | 2014-06-13 09:40:10 +1000 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2014-06-13 13:53:55 -0700 |
| commit | f907d9772c55d942fb178622b0b2b5a8ca103c11 (patch) | |
| tree | 04b61cb264604b465dc9a80c3246734e665942fb /src/libsyntax | |
| parent | 9d5ec04d184a5d28e75d74b725ebb7cc21b547af (diff) | |
| download | rust-f907d9772c55d942fb178622b0b2b5a8ca103c11.tar.gz rust-f907d9772c55d942fb178622b0b2b5a8ca103c11.zip | |
syntax: parse outer attributes in `quote_item!` calls.
Fixes #14857.
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/ext/quote.rs | 5 | ||||
| -rw-r--r-- | src/libsyntax/ext/tt/macro_rules.rs | 3 | ||||
| -rw-r--r-- | src/libsyntax/parse/mod.rs | 3 | ||||
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 5 |
4 files changed, 9 insertions, 7 deletions
diff --git a/src/libsyntax/ext/quote.rs b/src/libsyntax/ext/quote.rs index bc5442a94fb..4f1e2ab356e 100644 --- a/src/libsyntax/ext/quote.rs +++ b/src/libsyntax/ext/quote.rs @@ -358,9 +358,8 @@ pub fn expand_quote_item(cx: &mut ExtCtxt, sp: Span, tts: &[ast::TokenTree]) -> Box<base::MacResult> { - let e_attrs = cx.expr_vec_ng(sp); - let expanded = expand_parse_call(cx, sp, "parse_item", - vec!(e_attrs), tts); + let expanded = expand_parse_call(cx, sp, "parse_item_with_outer_attributes", + vec!(), tts); base::MacExpr::new(expanded) } diff --git a/src/libsyntax/ext/tt/macro_rules.rs b/src/libsyntax/ext/tt/macro_rules.rs index c4990255719..72c578b8769 100644 --- a/src/libsyntax/ext/tt/macro_rules.rs +++ b/src/libsyntax/ext/tt/macro_rules.rs @@ -73,8 +73,7 @@ impl<'a> MacResult for ParserAnyMacro<'a> { let mut ret = SmallVector::zero(); loop { let mut parser = self.parser.borrow_mut(); - let attrs = parser.parse_outer_attributes(); - match parser.parse_item(attrs) { + match parser.parse_item_with_outer_attributes() { Some(item) => ret.push(item), None => break } diff --git a/src/libsyntax/parse/mod.rs b/src/libsyntax/parse/mod.rs index 88746d145b6..1ebcbc8a7d1 100644 --- a/src/libsyntax/parse/mod.rs +++ b/src/libsyntax/parse/mod.rs @@ -117,8 +117,7 @@ pub fn parse_item_from_source_str(name: String, sess: &ParseSess) -> Option<Gc<ast::Item>> { let mut p = new_parser_from_source_str(sess, cfg, name, source); - let attrs = p.parse_outer_attributes(); - maybe_aborted(p.parse_item(attrs),p) + maybe_aborted(p.parse_item_with_outer_attributes(),p) } pub fn parse_meta_from_source_str(name: String, diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index e1a45e5643d..d11d303059f 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -4965,6 +4965,11 @@ impl<'a> Parser<'a> { return IoviNone(attrs); } + pub fn parse_item_with_outer_attributes(&mut self) -> Option<Gc<Item>> { + let attrs = self.parse_outer_attributes(); + self.parse_item(attrs) + } + pub fn parse_item(&mut self, attrs: Vec<Attribute> ) -> Option<Gc<Item>> { match self.parse_item_or_view_item(attrs, true) { IoviNone(_) => None, |
