@@ -51,6 +51,14 @@ impl<'a> Module<'a> {
51
51
pub ( crate ) fn attrs ( & self ) -> & [ ast:: Attribute ] {
52
52
& self . inner_attr
53
53
}
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
+ }
54
62
}
55
63
56
64
/// Maps each module to the corresponding file.
@@ -164,7 +172,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
164
172
165
173
if let ast:: ItemKind :: Mod ( _, ref sub_mod_kind) = item. kind {
166
174
let items = match sub_mod_kind {
167
- ast:: ModKind :: Loaded ( items, ..) => Cow :: Owned ( items. clone ( ) ) ,
175
+ ast:: ModKind :: Loaded ( items, ..) => Cow :: Borrowed ( items) ,
168
176
_ => Cow :: Owned ( ThinVec :: new ( ) ) ,
169
177
} ;
170
178
self . visit_sub_mod ( & item, Module :: new ( item. span , items, & [ ] ) , false ) ?;
@@ -176,7 +184,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
176
184
/// Visit modules from AST.
177
185
fn visit_mod_from_ast (
178
186
& mut self ,
179
- items : & ' ast [ rustc_ast:: ptr:: P < ast:: Item > ] ,
187
+ items : & [ rustc_ast:: ptr:: P < ast:: Item > ] ,
180
188
) -> Result < ( ) , ModuleResolutionError > {
181
189
for item in items {
182
190
if is_cfg_if ( item) {
@@ -197,7 +205,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
197
205
fn visit_sub_mod (
198
206
& mut self ,
199
207
item : & ' c ast:: Item ,
200
- sub_mod : Module < ' ast > ,
208
+ sub_mod : Module < ' _ > ,
201
209
from_ast : bool ,
202
210
) -> Result < ( ) , ModuleResolutionError > {
203
211
let old_directory = self . directory . clone ( ) ;
@@ -214,7 +222,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
214
222
fn peek_sub_mod (
215
223
& self ,
216
224
item : & ' c ast:: Item ,
217
- sub_mod : & Module < ' ast > ,
225
+ sub_mod : & Module < ' _ > ,
218
226
) -> Result < Option < SubModKind < ' c , ' ast > > , ModuleResolutionError > {
219
227
if contains_skip ( & item. attrs ) {
220
228
return Ok ( None ) ;
@@ -254,7 +262,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
254
262
255
263
fn visit_sub_mod_inner (
256
264
& mut self ,
257
- sub_mod : Module < ' ast > ,
265
+ sub_mod : Module < ' _ > ,
258
266
sub_mod_kind : SubModKind < ' c , ' ast > ,
259
267
from_ast : bool ,
260
268
) -> Result < ( ) , ModuleResolutionError > {
@@ -285,17 +293,15 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
285
293
286
294
fn visit_sub_mod_after_directory_update (
287
295
& mut self ,
288
- sub_mod : Module < ' ast > ,
296
+ sub_mod : Module < ' _ > ,
289
297
directory : Option < Directory > ,
290
298
from_ast : bool ,
291
299
) -> Result < ( ) , ModuleResolutionError > {
292
300
if let Some ( directory) = directory {
293
301
self . directory = directory;
294
302
}
295
303
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 ) ?;
299
305
} else {
300
306
self . visit_mod_outside_ast ( & sub_mod. items ) ?;
301
307
}
@@ -307,7 +313,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
307
313
& self ,
308
314
mod_name : symbol:: Ident ,
309
315
attrs : & [ ast:: Attribute ] ,
310
- sub_mod : & Module < ' ast > ,
316
+ sub_mod : & Module < ' _ > ,
311
317
) -> Result < Option < SubModKind < ' c , ' ast > > , ModuleResolutionError > {
312
318
let relative = match self . directory . ownership {
313
319
DirectoryOwnership :: Owned { relative } => relative,
@@ -356,7 +362,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
356
362
return Ok ( None ) ;
357
363
} else {
358
364
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 ( ) ) ) ;
360
366
}
361
367
return Ok ( Some ( SubModKind :: MultiExternal ( mods_outside_ast) ) ) ;
362
368
}
@@ -377,7 +383,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
377
383
Module :: new ( span, Cow :: Owned ( items) , & attrs) ,
378
384
) ) ;
379
385
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 ( ) ) ) ;
381
387
}
382
388
Ok ( Some ( SubModKind :: MultiExternal ( mods_outside_ast) ) )
383
389
}
@@ -391,7 +397,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
391
397
} ) ,
392
398
Err ( ..) => {
393
399
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 ( ) ) ) ;
395
401
}
396
402
Ok ( Some ( SubModKind :: MultiExternal ( mods_outside_ast) ) )
397
403
}
@@ -462,7 +468,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
462
468
fn find_mods_outside_of_ast (
463
469
& self ,
464
470
attrs : & [ ast:: Attribute ] ,
465
- sub_mod : & Module < ' ast > ,
471
+ sub_mod : & Module < ' _ > ,
466
472
) -> Vec < ( PathBuf , DirectoryOwnership , Module < ' ast > ) > {
467
473
// Filter nested path, like `#[cfg_attr(feature = "foo", path = "bar.rs")]`.
468
474
let mut path_visitor = visitor:: PathVisitor :: default ( ) ;
@@ -483,7 +489,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
483
489
result. push ( (
484
490
actual_path,
485
491
DirectoryOwnership :: Owned { relative : None } ,
486
- sub_mod. clone ( ) ,
492
+ sub_mod. to_owned ( ) ,
487
493
) ) ;
488
494
continue ;
489
495
}
0 commit comments