|
1 | 1 | //! Conditional compilation stripping.
|
2 | 2 |
|
| 3 | +use crate::base::Annotatable; |
| 4 | + |
3 | 5 | use rustc_ast::attr::HasAttrs;
|
4 | 6 | use rustc_ast::mut_visit::*;
|
5 | 7 | use rustc_ast::ptr::P;
|
@@ -496,6 +498,49 @@ impl<'a> StripUnconfigured<'a> {
|
496 | 498 | pub fn configure_fn_decl(&mut self, fn_decl: &mut ast::FnDecl) {
|
497 | 499 | fn_decl.inputs.flat_map_in_place(|arg| self.configure(arg));
|
498 | 500 | }
|
| 501 | + |
| 502 | + pub fn fully_configure(&mut self, item: Annotatable) -> Annotatable { |
| 503 | + // Since the item itself has already been configured by the InvocationCollector, |
| 504 | + // we know that fold result vector will contain exactly one element |
| 505 | + match item { |
| 506 | + Annotatable::Item(item) => Annotatable::Item(self.flat_map_item(item).pop().unwrap()), |
| 507 | + Annotatable::TraitItem(item) => { |
| 508 | + Annotatable::TraitItem(self.flat_map_trait_item(item).pop().unwrap()) |
| 509 | + } |
| 510 | + Annotatable::ImplItem(item) => { |
| 511 | + Annotatable::ImplItem(self.flat_map_impl_item(item).pop().unwrap()) |
| 512 | + } |
| 513 | + Annotatable::ForeignItem(item) => { |
| 514 | + Annotatable::ForeignItem(self.flat_map_foreign_item(item).pop().unwrap()) |
| 515 | + } |
| 516 | + Annotatable::Stmt(stmt) => { |
| 517 | + Annotatable::Stmt(stmt.map(|stmt| self.flat_map_stmt(stmt).pop().unwrap())) |
| 518 | + } |
| 519 | + Annotatable::Expr(mut expr) => Annotatable::Expr({ |
| 520 | + self.visit_expr(&mut expr); |
| 521 | + expr |
| 522 | + }), |
| 523 | + Annotatable::Arm(arm) => Annotatable::Arm(self.flat_map_arm(arm).pop().unwrap()), |
| 524 | + Annotatable::Field(field) => { |
| 525 | + Annotatable::Field(self.flat_map_field(field).pop().unwrap()) |
| 526 | + } |
| 527 | + Annotatable::FieldPat(fp) => { |
| 528 | + Annotatable::FieldPat(self.flat_map_field_pattern(fp).pop().unwrap()) |
| 529 | + } |
| 530 | + Annotatable::GenericParam(param) => { |
| 531 | + Annotatable::GenericParam(self.flat_map_generic_param(param).pop().unwrap()) |
| 532 | + } |
| 533 | + Annotatable::Param(param) => { |
| 534 | + Annotatable::Param(self.flat_map_param(param).pop().unwrap()) |
| 535 | + } |
| 536 | + Annotatable::StructField(sf) => { |
| 537 | + Annotatable::StructField(self.flat_map_struct_field(sf).pop().unwrap()) |
| 538 | + } |
| 539 | + Annotatable::Variant(v) => { |
| 540 | + Annotatable::Variant(self.flat_map_variant(v).pop().unwrap()) |
| 541 | + } |
| 542 | + } |
| 543 | + } |
499 | 544 | }
|
500 | 545 |
|
501 | 546 | impl<'a> MutVisitor for StripUnconfigured<'a> {
|
|
0 commit comments