Rollup merge of #49350 - abonander:macros-in-extern, r=petrochenkov
Expand macros in `extern {}` blocks
This permits macro and proc-macro and attribute invocations (the latter only with the `proc_macro` feature of course) in `extern {}` blocks, gated behind a new `macros_in_extern` feature.
A tracking issue is now open at #49476
closes #48747
This commit is contained in:
@@ -60,10 +60,14 @@ pub trait Folder : Sized {
|
||||
noop_fold_use_tree(use_tree, self)
|
||||
}
|
||||
|
||||
fn fold_foreign_item(&mut self, ni: ForeignItem) -> ForeignItem {
|
||||
fn fold_foreign_item(&mut self, ni: ForeignItem) -> SmallVector<ForeignItem> {
|
||||
noop_fold_foreign_item(ni, self)
|
||||
}
|
||||
|
||||
fn fold_foreign_item_simple(&mut self, ni: ForeignItem) -> ForeignItem {
|
||||
noop_fold_foreign_item_simple(ni, self)
|
||||
}
|
||||
|
||||
fn fold_item(&mut self, i: P<Item>) -> SmallVector<P<Item>> {
|
||||
noop_fold_item(i, self)
|
||||
}
|
||||
@@ -414,7 +418,7 @@ pub fn noop_fold_foreign_mod<T: Folder>(ForeignMod {abi, items}: ForeignMod,
|
||||
fld: &mut T) -> ForeignMod {
|
||||
ForeignMod {
|
||||
abi,
|
||||
items: items.move_map(|x| fld.fold_foreign_item(x)),
|
||||
items: items.move_flat_map(|x| fld.fold_foreign_item(x)),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -648,6 +652,10 @@ pub fn noop_fold_interpolated<T: Folder>(nt: token::Nonterminal, fld: &mut T)
|
||||
token::NtArg(arg) => token::NtArg(fld.fold_arg(arg)),
|
||||
token::NtVis(vis) => token::NtVis(fld.fold_vis(vis)),
|
||||
token::NtLifetime(lifetime) => token::NtLifetime(fld.fold_lifetime(lifetime)),
|
||||
token::NtForeignItem(ni) =>
|
||||
token::NtForeignItem(fld.fold_foreign_item(ni)
|
||||
// see reasoning above
|
||||
.expect_one("expected fold to produce exactly one item")),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1072,7 +1080,12 @@ pub fn noop_fold_item_simple<T: Folder>(Item {id, ident, attrs, node, vis, span,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn noop_fold_foreign_item<T: Folder>(ni: ForeignItem, folder: &mut T) -> ForeignItem {
|
||||
pub fn noop_fold_foreign_item<T: Folder>(ni: ForeignItem, folder: &mut T)
|
||||
-> SmallVector<ForeignItem> {
|
||||
SmallVector::one(folder.fold_foreign_item_simple(ni))
|
||||
}
|
||||
|
||||
pub fn noop_fold_foreign_item_simple<T: Folder>(ni: ForeignItem, folder: &mut T) -> ForeignItem {
|
||||
ForeignItem {
|
||||
id: folder.new_id(ni.id),
|
||||
vis: folder.fold_vis(ni.vis),
|
||||
@@ -1086,6 +1099,7 @@ pub fn noop_fold_foreign_item<T: Folder>(ni: ForeignItem, folder: &mut T) -> For
|
||||
ForeignItemKind::Static(folder.fold_ty(t), m)
|
||||
}
|
||||
ForeignItemKind::Ty => ForeignItemKind::Ty,
|
||||
ForeignItemKind::Macro(mac) => ForeignItemKind::Macro(folder.fold_mac(mac)),
|
||||
},
|
||||
span: folder.new_span(ni.span)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user