Run decorators on expanded AST.
This commit is contained in:
parent
b522b25a41
commit
dc5cc1b1f2
@ -724,11 +724,7 @@ fn expand_annotatable(a: Annotatable,
|
||||
-> SmallVector<Annotatable> {
|
||||
let a = expand_item_multi_modifier(a, fld);
|
||||
|
||||
let mut decorator_items = SmallVector::zero();
|
||||
let mut new_attrs = Vec::new();
|
||||
expand_decorators(a.clone(), fld, &mut decorator_items, &mut new_attrs);
|
||||
|
||||
let mut new_items: SmallVector<Annotatable> = match a {
|
||||
let new_items: SmallVector<Annotatable> = match a {
|
||||
Annotatable::Item(it) => match it.node {
|
||||
ast::ItemKind::Mac(..) => {
|
||||
let new_items: SmallVector<P<ast::Item>> = it.and_then(|it| match it.node {
|
||||
@ -746,7 +742,7 @@ fn expand_annotatable(a: Annotatable,
|
||||
if valid_ident {
|
||||
fld.cx.mod_push(it.ident);
|
||||
}
|
||||
let macro_use = contains_macro_use(fld, &new_attrs[..]);
|
||||
let macro_use = contains_macro_use(fld, &it.attrs);
|
||||
let result = with_exts_frame!(fld.cx.syntax_env,
|
||||
macro_use,
|
||||
noop_fold_item(it, fld));
|
||||
@ -755,13 +751,7 @@ fn expand_annotatable(a: Annotatable,
|
||||
}
|
||||
result.into_iter().map(|i| Annotatable::Item(i)).collect()
|
||||
},
|
||||
_ => {
|
||||
let it = P(ast::Item {
|
||||
attrs: new_attrs,
|
||||
..(*it).clone()
|
||||
});
|
||||
noop_fold_item(it, fld).into_iter().map(|i| Annotatable::Item(i)).collect()
|
||||
}
|
||||
_ => noop_fold_item(it, fld).into_iter().map(|i| Annotatable::Item(i)).collect(),
|
||||
},
|
||||
|
||||
Annotatable::TraitItem(it) => match it.node {
|
||||
@ -790,6 +780,17 @@ fn expand_annotatable(a: Annotatable,
|
||||
}
|
||||
};
|
||||
|
||||
new_items.into_iter().flat_map(|a| decorate(a, fld)).collect()
|
||||
}
|
||||
|
||||
fn decorate(a: Annotatable, fld: &mut MacroExpander) -> SmallVector<Annotatable> {
|
||||
let mut decorator_items = SmallVector::zero();
|
||||
let mut new_attrs = Vec::new();
|
||||
expand_decorators(a.clone(), fld, &mut decorator_items, &mut new_attrs);
|
||||
let decorator_items =
|
||||
decorator_items.into_iter().flat_map(|a| expand_annotatable(a, fld)).collect();
|
||||
|
||||
let mut new_items = SmallVector::one(a.fold_attrs(new_attrs));
|
||||
new_items.push_all(decorator_items);
|
||||
new_items
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user