@@ -54,6 +54,18 @@ impl<'a> Module<'a> {
5454 pub ( crate ) fn attrs ( & self ) -> & [ ast:: Attribute ] {
5555 & self . inner_attr
5656 }
57+
58+ pub ( crate ) fn to_owned ( & self ) -> Module < ' static > {
59+ Module {
60+ ast_mod_kind : self
61+ . ast_mod_kind
62+ . as_ref ( )
63+ . map ( |i| Cow :: Owned ( ( * * i) . clone ( ) ) ) ,
64+ items : Cow :: Owned ( ( & * self . items ) . clone ( ) ) ,
65+ inner_attr : self . inner_attr . clone ( ) ,
66+ span : self . span ,
67+ }
68+ }
5769}
5870
5971/// Maps each module to the corresponding file.
@@ -172,7 +184,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
172184 & item,
173185 Module :: new (
174186 span,
175- Some ( Cow :: Owned ( sub_mod_kind. clone ( ) ) ) ,
187+ Some ( Cow :: Borrowed ( sub_mod_kind) ) ,
176188 Cow :: Owned ( ThinVec :: new ( ) ) ,
177189 & [ ] ,
178190 ) ,
@@ -185,7 +197,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
185197 /// Visit modules from AST.
186198 fn visit_mod_from_ast (
187199 & mut self ,
188- items : & ' ast [ rustc_ast:: ptr:: P < ast:: Item > ] ,
200+ items : & [ rustc_ast:: ptr:: P < ast:: Item > ] ,
189201 ) -> Result < ( ) , ModuleResolutionError > {
190202 for item in items {
191203 if is_cfg_if ( item) {
@@ -211,7 +223,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
211223 fn visit_sub_mod (
212224 & mut self ,
213225 item : & ' c ast:: Item ,
214- sub_mod : Module < ' ast > ,
226+ sub_mod : Module < ' _ > ,
215227 ) -> Result < ( ) , ModuleResolutionError > {
216228 let old_directory = self . directory . clone ( ) ;
217229 let sub_mod_kind = self . peek_sub_mod ( item, & sub_mod) ?;
@@ -227,7 +239,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
227239 fn peek_sub_mod (
228240 & self ,
229241 item : & ' c ast:: Item ,
230- sub_mod : & Module < ' ast > ,
242+ sub_mod : & Module < ' _ > ,
231243 ) -> Result < Option < SubModKind < ' c , ' ast > > , ModuleResolutionError > {
232244 if contains_skip ( & item. attrs ) {
233245 return Ok ( None ) ;
@@ -267,7 +279,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
267279
268280 fn visit_sub_mod_inner (
269281 & mut self ,
270- sub_mod : Module < ' ast > ,
282+ sub_mod : Module < ' _ > ,
271283 sub_mod_kind : SubModKind < ' c , ' ast > ,
272284 ) -> Result < ( ) , ModuleResolutionError > {
273285 match sub_mod_kind {
@@ -297,7 +309,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
297309
298310 fn visit_sub_mod_after_directory_update (
299311 & mut self ,
300- sub_mod : Module < ' ast > ,
312+ sub_mod : Module < ' _ > ,
301313 directory : Option < Directory > ,
302314 ) -> Result < ( ) , ModuleResolutionError > {
303315 if let Some ( directory) = directory {
@@ -319,7 +331,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
319331 & self ,
320332 mod_name : symbol:: Ident ,
321333 attrs : & [ ast:: Attribute ] ,
322- sub_mod : & Module < ' ast > ,
334+ sub_mod : & Module < ' _ > ,
323335 ) -> Result < Option < SubModKind < ' c , ' ast > > , ModuleResolutionError > {
324336 let relative = match self . directory . ownership {
325337 DirectoryOwnership :: Owned { relative } => relative,
@@ -373,7 +385,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
373385 return Ok ( None ) ;
374386 } else {
375387 if should_insert {
376- mods_outside_ast. push ( ( file_path, dir_ownership, sub_mod. clone ( ) ) ) ;
388+ mods_outside_ast. push ( ( file_path, dir_ownership, sub_mod. to_owned ( ) ) ) ;
377389 }
378390 return Ok ( Some ( SubModKind :: MultiExternal ( mods_outside_ast) ) ) ;
379391 }
@@ -404,7 +416,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
404416 ) ,
405417 ) ) ;
406418 if should_insert {
407- mods_outside_ast. push ( ( file_path, dir_ownership, sub_mod. clone ( ) ) ) ;
419+ mods_outside_ast. push ( ( file_path, dir_ownership, sub_mod. to_owned ( ) ) ) ;
408420 }
409421 Ok ( Some ( SubModKind :: MultiExternal ( mods_outside_ast) ) )
410422 }
@@ -418,7 +430,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
418430 } ) ,
419431 Err ( ..) => {
420432 if should_insert {
421- mods_outside_ast. push ( ( file_path, dir_ownership, sub_mod. clone ( ) ) ) ;
433+ mods_outside_ast. push ( ( file_path, dir_ownership, sub_mod. to_owned ( ) ) ) ;
422434 }
423435 Ok ( Some ( SubModKind :: MultiExternal ( mods_outside_ast) ) )
424436 }
@@ -489,7 +501,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
489501 fn find_mods_outside_of_ast (
490502 & self ,
491503 attrs : & [ ast:: Attribute ] ,
492- sub_mod : & Module < ' ast > ,
504+ sub_mod : & Module < ' _ > ,
493505 ) -> Vec < ( PathBuf , DirectoryOwnership , Module < ' ast > ) > {
494506 // Filter nested path, like `#[cfg_attr(feature = "foo", path = "bar.rs")]`.
495507 let mut path_visitor = visitor:: PathVisitor :: default ( ) ;
@@ -510,7 +522,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
510522 result. push ( (
511523 actual_path,
512524 DirectoryOwnership :: Owned { relative : None } ,
513- sub_mod. clone ( ) ,
525+ sub_mod. to_owned ( ) ,
514526 ) ) ;
515527 continue ;
516528 }
0 commit comments