parse: `NtItem` -> `parse_item_common`.

This commit is contained in:
Mazdak Farrokhzad 2020-02-23 06:53:59 +01:00
parent b01c1e2092
commit 842027f35b
2 changed files with 43 additions and 8 deletions

View File

@ -31,16 +31,10 @@ impl<'a> Parser<'a> {
pub(super) fn parse_item_(
&mut self,
mut attrs: Vec<Attribute>,
attrs: Vec<Attribute>,
macros_allowed: bool,
attributes_allowed: bool,
) -> PResult<'a, Option<P<Item>>> {
maybe_whole!(self, NtItem, |item| {
let mut item = item;
mem::swap(&mut item.attrs, &mut attrs);
item.attrs.extend(attrs);
Some(item)
});
let item = self.parse_item_common(attrs, macros_allowed, attributes_allowed, |_| true)?;
if let Some(ref item) = item {
self.error_on_illegal_default(item.defaultness);
@ -50,11 +44,18 @@ impl<'a> Parser<'a> {
fn parse_item_common(
&mut self,
attrs: Vec<Attribute>,
mut attrs: Vec<Attribute>,
mac_allowed: bool,
attrs_allowed: bool,
req_name: ReqName,
) -> PResult<'a, Option<Item>> {
maybe_whole!(self, NtItem, |item| {
let mut item = item;
mem::swap(&mut item.attrs, &mut attrs);
item.attrs.extend(attrs);
Some(item.into_inner())
});
let mut unclosed_delims = vec![];
let (mut item, tokens) = self.collect_tokens(|this| {
let item = this.parse_item_common_(attrs, mac_allowed, attrs_allowed, req_name);

View File

@ -0,0 +1,34 @@
// check-pass
fn main() {}
macro_rules! mac_impl {
($i:item) => {
struct S;
impl S { $i }
}
}
mac_impl! {
fn foo() {}
}
macro_rules! mac_trait {
($i:item) => {
trait T { $i }
}
}
mac_trait! {
fn foo() {}
}
macro_rules! mac_extern {
($i:item) => {
extern "C" { $i }
}
}
mac_extern! {
fn foo();
}