Skip to content

Commit d768862

Browse files
committed
Inline ModItem and preserve P
1 parent a244d78 commit d768862

File tree

3 files changed

+11
-22
lines changed

3 files changed

+11
-22
lines changed

src/modules.rs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -155,17 +155,13 @@ impl<'ast, 'sess> ModResolver<'ast, 'sess> {
155155
fn visit_cfg_if(&mut self, item: &ast::Item) -> Result<(), ModuleResolutionError> {
156156
let mut visitor = visitor::CfgIfVisitor::new(self.parse_sess);
157157
visitor.visit_item(item);
158-
for module_item in visitor.mods() {
159-
if let ast::ItemKind::Mod(_, ref sub_mod_kind) = module_item.item.kind {
158+
for item in visitor.items {
159+
if let ast::ItemKind::Mod(_, ref sub_mod_kind) = item.kind {
160160
let items = match sub_mod_kind {
161161
ast::ModKind::Loaded(items, ..) => Cow::Borrowed(items),
162162
_ => Cow::Owned(ThinVec::new()),
163163
};
164-
self.visit_sub_mod(
165-
&module_item.item,
166-
Module::new(module_item.item.span, items, &[]),
167-
false,
168-
)?;
164+
self.visit_sub_mod(&item, Module::new(item.span, items, &[]), false)?;
169165
}
170166
}
171167
Ok(())

src/modules/visitor.rs

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,25 @@
11
use rustc_ast::ast;
2+
use rustc_ast::ptr::P;
23
use rustc_ast::visit::Visitor;
34
use rustc_span::Symbol;
45

56
use crate::attr::MetaVisitor;
67
use crate::parse::macros::cfg_if::parse_cfg_if;
78
use crate::parse::session::ParseSess;
89

9-
pub(crate) struct ModItem {
10-
pub(crate) item: ast::Item,
11-
}
12-
1310
/// Traverse `cfg_if!` macro and fetch modules.
1411
pub(crate) struct CfgIfVisitor<'a> {
1512
parse_sess: &'a ParseSess,
16-
mods: Vec<ModItem>,
13+
pub(crate) items: Vec<P<ast::Item>>,
1714
}
1815

1916
impl<'a> CfgIfVisitor<'a> {
2017
pub(crate) fn new(parse_sess: &'a ParseSess) -> CfgIfVisitor<'a> {
2118
CfgIfVisitor {
22-
mods: vec![],
2319
parse_sess,
20+
items: Vec::new(),
2421
}
2522
}
26-
27-
pub(crate) fn mods(self) -> Vec<ModItem> {
28-
self.mods
29-
}
3023
}
3124

3225
impl<'a, 'ast: 'a> Visitor<'ast> for CfgIfVisitor<'a> {
@@ -63,8 +56,7 @@ impl<'a, 'ast: 'a> CfgIfVisitor<'a> {
6356
};
6457

6558
let items = parse_cfg_if(self.parse_sess, mac)?;
66-
self.mods
67-
.append(&mut items.into_iter().map(|item| ModItem { item }).collect());
59+
self.items.extend(items);
6860

6961
Ok(())
7062
}

src/parse/macros/cfg_if.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use std::panic::{catch_unwind, AssertUnwindSafe};
22

33
use rustc_ast::ast;
4+
use rustc_ast::ptr::P;
45
use rustc_ast::token::{Delimiter, TokenKind};
56
use rustc_parse::parser::ForceCollect;
67
use rustc_span::symbol::kw;
@@ -11,7 +12,7 @@ use crate::parse::session::ParseSess;
1112
pub(crate) fn parse_cfg_if<'a>(
1213
sess: &'a ParseSess,
1314
mac: &'a ast::MacCall,
14-
) -> Result<Vec<ast::Item>, &'static str> {
15+
) -> Result<Vec<P<ast::Item>>, &'static str> {
1516
match catch_unwind(AssertUnwindSafe(|| parse_cfg_if_inner(sess, mac))) {
1617
Ok(Ok(items)) => Ok(items),
1718
Ok(err @ Err(_)) => err,
@@ -22,7 +23,7 @@ pub(crate) fn parse_cfg_if<'a>(
2223
fn parse_cfg_if_inner<'a>(
2324
sess: &'a ParseSess,
2425
mac: &'a ast::MacCall,
25-
) -> Result<Vec<ast::Item>, &'static str> {
26+
) -> Result<Vec<P<ast::Item>>, &'static str> {
2627
let ts = mac.args.tokens.clone();
2728
let mut parser = build_stream_parser(sess.inner(), ts);
2829

@@ -63,7 +64,7 @@ fn parse_cfg_if_inner<'a>(
6364
&& parser.token.kind != TokenKind::Eof
6465
{
6566
let item = match parser.parse_item(ForceCollect::No) {
66-
Ok(Some(item_ptr)) => item_ptr.into_inner(),
67+
Ok(Some(item_ptr)) => item_ptr,
6768
Ok(None) => continue,
6869
Err(err) => {
6970
err.cancel();

0 commit comments

Comments
 (0)