rustc: Process #[cfg]/#[cfg_attr] on crates
This commit implements processing these two attributes at the crate level as well as at the item level. When #[cfg] is applied at the crate level, then the entire crate will be omitted if the cfg doesn't match. The #[cfg_attr] attribute is processed as usual in that the attribute is included or not depending on whether the cfg matches. This was spurred on by motivations of #18585 where #[cfg_attr] annotations will be applied at the crate-level. cc #18585
This commit is contained in:
@@ -108,7 +108,10 @@ impl<'a> fold::Folder for TestHarnessGenerator<'a> {
|
||||
}
|
||||
|
||||
fn fold_item(&mut self, i: P<ast::Item>) -> SmallVector<P<ast::Item>> {
|
||||
self.cx.path.push(i.ident);
|
||||
let ident = i.ident;
|
||||
if ident.name != token::special_idents::invalid.name {
|
||||
self.cx.path.push(ident);
|
||||
}
|
||||
debug!("current path: {}",
|
||||
ast_util::path_name_i(self.cx.path.as_slice()));
|
||||
|
||||
@@ -143,7 +146,9 @@ impl<'a> fold::Folder for TestHarnessGenerator<'a> {
|
||||
ast::ItemMod(..) => fold::noop_fold_item(i, self),
|
||||
_ => SmallVector::one(i),
|
||||
};
|
||||
self.cx.path.pop();
|
||||
if ident.name != token::special_idents::invalid.name {
|
||||
self.cx.path.pop();
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user