Skip to content

Commit b6e563d

Browse files
committed
Avoid cloning nodes from the AST
1 parent 3d5bb60 commit b6e563d

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

src/modules.rs

+7-4
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
100100
visitor.visit_item(&item);
101101
for module_item in visitor.mods() {
102102
if let ast::ItemKind::Mod(ref sub_mod) = module_item.item.node {
103-
self.visit_mod_inner(&item, Cow::Owned(sub_mod.clone()))?;
103+
self.visit_mod_from_mac_inner(&item, Cow::Owned(sub_mod.clone()))?;
104104
}
105105
}
106106
Ok(())
@@ -114,13 +114,13 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
114114
}
115115

116116
if let ast::ItemKind::Mod(ref sub_mod) = item.node {
117-
self.visit_mod_inner(item, Cow::Owned(sub_mod.clone()))?;
117+
self.visit_mod_from_mac_inner(item, Cow::Owned(sub_mod.clone()))?;
118118
}
119119
}
120120
Ok(())
121121
}
122122

123-
fn visit_mod_inner(
123+
fn visit_mod_from_mac_inner(
124124
&mut self,
125125
item: &'c ast::Item,
126126
sub_mod: Cow<'ast, ast::Mod>,
@@ -140,7 +140,10 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
140140
}
141141

142142
if let ast::ItemKind::Mod(ref sub_mod) = item.node {
143-
self.visit_mod_inner(item, Cow::Borrowed(sub_mod))?;
143+
let old_directory = self.directory.clone();
144+
self.visit_sub_mod(item, &Cow::Borrowed(sub_mod))?;
145+
self.visit_mod_from_ast(sub_mod)?;
146+
self.directory = old_directory;
144147
}
145148
}
146149
Ok(())

0 commit comments

Comments
 (0)