@@ -51,6 +51,14 @@ impl<'a> Module<'a> {
5151 pub ( crate ) fn attrs ( & self ) -> & [ ast:: Attribute ] {
5252 & self . inner_attr
5353 }
54+
55+ pub ( crate ) fn to_owned ( & self ) -> Module < ' static > {
56+ Module {
57+ items : Cow :: Owned ( ( & * self . items ) . clone ( ) ) ,
58+ inner_attr : self . inner_attr . clone ( ) ,
59+ span : self . span ,
60+ }
61+ }
5462}
5563
5664/// Maps each module to the corresponding file.
@@ -164,7 +172,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
164172
165173 if let ast:: ItemKind :: Mod ( _, ref sub_mod_kind) = item. kind {
166174 let items = match sub_mod_kind {
167- ast:: ModKind :: Loaded ( items, ..) => Cow :: Owned ( items. clone ( ) ) ,
175+ ast:: ModKind :: Loaded ( items, ..) => Cow :: Borrowed ( items) ,
168176 _ => Cow :: Owned ( ThinVec :: new ( ) ) ,
169177 } ;
170178 self . visit_sub_mod ( & item, Module :: new ( item. span , items, & [ ] ) , false ) ?;
@@ -176,7 +184,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
176184 /// Visit modules from AST.
177185 fn visit_mod_from_ast (
178186 & mut self ,
179- items : & ' ast [ rustc_ast:: ptr:: P < ast:: Item > ] ,
187+ items : & [ rustc_ast:: ptr:: P < ast:: Item > ] ,
180188 ) -> Result < ( ) , ModuleResolutionError > {
181189 for item in items {
182190 if is_cfg_if ( item) {
@@ -197,7 +205,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
197205 fn visit_sub_mod (
198206 & mut self ,
199207 item : & ' c ast:: Item ,
200- sub_mod : Module < ' ast > ,
208+ sub_mod : Module < ' _ > ,
201209 from_ast : bool ,
202210 ) -> Result < ( ) , ModuleResolutionError > {
203211 let old_directory = self . directory . clone ( ) ;
@@ -214,7 +222,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
214222 fn peek_sub_mod (
215223 & self ,
216224 item : & ' c ast:: Item ,
217- sub_mod : & Module < ' ast > ,
225+ sub_mod : & Module < ' _ > ,
218226 ) -> Result < Option < SubModKind < ' c , ' ast > > , ModuleResolutionError > {
219227 if contains_skip ( & item. attrs ) {
220228 return Ok ( None ) ;
@@ -254,7 +262,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
254262
255263 fn visit_sub_mod_inner (
256264 & mut self ,
257- sub_mod : Module < ' ast > ,
265+ sub_mod : Module < ' _ > ,
258266 sub_mod_kind : SubModKind < ' c , ' ast > ,
259267 from_ast : bool ,
260268 ) -> Result < ( ) , ModuleResolutionError > {
@@ -285,17 +293,15 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
285293
286294 fn visit_sub_mod_after_directory_update (
287295 & mut self ,
288- sub_mod : Module < ' ast > ,
296+ sub_mod : Module < ' _ > ,
289297 directory : Option < Directory > ,
290298 from_ast : bool ,
291299 ) -> Result < ( ) , ModuleResolutionError > {
292300 if let Some ( directory) = directory {
293301 self . directory = directory;
294302 }
295303 if from_ast {
296- if let Cow :: Borrowed ( items) = sub_mod. items {
297- self . visit_mod_from_ast ( items) ?;
298- }
304+ self . visit_mod_from_ast ( & sub_mod. items ) ?;
299305 } else {
300306 self . visit_mod_outside_ast ( & sub_mod. items ) ?;
301307 }
@@ -307,7 +313,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
307313 & self ,
308314 mod_name : symbol:: Ident ,
309315 attrs : & [ ast:: Attribute ] ,
310- sub_mod : & Module < ' ast > ,
316+ sub_mod : & Module < ' _ > ,
311317 ) -> Result < Option < SubModKind < ' c , ' ast > > , ModuleResolutionError > {
312318 let relative = match self . directory . ownership {
313319 DirectoryOwnership :: Owned { relative } => relative,
@@ -356,7 +362,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
356362 return Ok ( None ) ;
357363 } else {
358364 if should_insert {
359- mods_outside_ast. push ( ( file_path, dir_ownership, sub_mod. clone ( ) ) ) ;
365+ mods_outside_ast. push ( ( file_path, dir_ownership, sub_mod. to_owned ( ) ) ) ;
360366 }
361367 return Ok ( Some ( SubModKind :: MultiExternal ( mods_outside_ast) ) ) ;
362368 }
@@ -377,7 +383,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
377383 Module :: new ( span, Cow :: Owned ( items) , & attrs) ,
378384 ) ) ;
379385 if should_insert {
380- mods_outside_ast. push ( ( file_path, dir_ownership, sub_mod. clone ( ) ) ) ;
386+ mods_outside_ast. push ( ( file_path, dir_ownership, sub_mod. to_owned ( ) ) ) ;
381387 }
382388 Ok ( Some ( SubModKind :: MultiExternal ( mods_outside_ast) ) )
383389 }
@@ -391,7 +397,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
391397 } ) ,
392398 Err ( ..) => {
393399 if should_insert {
394- mods_outside_ast. push ( ( file_path, dir_ownership, sub_mod. clone ( ) ) ) ;
400+ mods_outside_ast. push ( ( file_path, dir_ownership, sub_mod. to_owned ( ) ) ) ;
395401 }
396402 Ok ( Some ( SubModKind :: MultiExternal ( mods_outside_ast) ) )
397403 }
@@ -462,7 +468,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
462468 fn find_mods_outside_of_ast (
463469 & self ,
464470 attrs : & [ ast:: Attribute ] ,
465- sub_mod : & Module < ' ast > ,
471+ sub_mod : & Module < ' _ > ,
466472 ) -> Vec < ( PathBuf , DirectoryOwnership , Module < ' ast > ) > {
467473 // Filter nested path, like `#[cfg_attr(feature = "foo", path = "bar.rs")]`.
468474 let mut path_visitor = visitor:: PathVisitor :: default ( ) ;
@@ -483,7 +489,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
483489 result. push ( (
484490 actual_path,
485491 DirectoryOwnership :: Owned { relative : None } ,
486- sub_mod. clone ( ) ,
492+ sub_mod. to_owned ( ) ,
487493 ) ) ;
488494 continue ;
489495 }
0 commit comments