@@ -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.
@@ -150,7 +158,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
150
158
for module_item in visitor. mods ( ) {
151
159
if let ast:: ItemKind :: Mod ( _, ref sub_mod_kind) = module_item. item . kind {
152
160
let items = match sub_mod_kind {
153
- ast:: ModKind :: Loaded ( items, ..) => Cow :: Owned ( items. clone ( ) ) ,
161
+ ast:: ModKind :: Loaded ( items, ..) => Cow :: Borrowed ( items) ,
154
162
_ => Cow :: Owned ( ThinVec :: new ( ) ) ,
155
163
} ;
156
164
self . visit_sub_mod (
@@ -176,7 +184,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
176
184
177
185
if let ast:: ItemKind :: Mod ( _, ref sub_mod_kind) = item. kind {
178
186
let items = match sub_mod_kind {
179
- ast:: ModKind :: Loaded ( items, ..) => Cow :: Owned ( items. clone ( ) ) ,
187
+ ast:: ModKind :: Loaded ( items, ..) => Cow :: Borrowed ( items) ,
180
188
_ => Cow :: Owned ( ThinVec :: new ( ) ) ,
181
189
} ;
182
190
self . visit_sub_mod ( & item, Module :: new ( item. span , items, & [ ] ) , false ) ?;
@@ -188,7 +196,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
188
196
/// Visit modules from AST.
189
197
fn visit_mod_from_ast (
190
198
& mut self ,
191
- items : & ' ast [ rustc_ast:: ptr:: P < ast:: Item > ] ,
199
+ items : & [ rustc_ast:: ptr:: P < ast:: Item > ] ,
192
200
) -> Result < ( ) , ModuleResolutionError > {
193
201
for item in items {
194
202
if is_cfg_if ( item) {
@@ -209,7 +217,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
209
217
fn visit_sub_mod (
210
218
& mut self ,
211
219
item : & ' c ast:: Item ,
212
- sub_mod : Module < ' ast > ,
220
+ sub_mod : Module < ' _ > ,
213
221
from_ast : bool ,
214
222
) -> Result < ( ) , ModuleResolutionError > {
215
223
let old_directory = self . directory . clone ( ) ;
@@ -226,7 +234,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
226
234
fn peek_sub_mod (
227
235
& self ,
228
236
item : & ' c ast:: Item ,
229
- sub_mod : & Module < ' ast > ,
237
+ sub_mod : & Module < ' _ > ,
230
238
) -> Result < Option < SubModKind < ' c , ' ast > > , ModuleResolutionError > {
231
239
if contains_skip ( & item. attrs ) {
232
240
return Ok ( None ) ;
@@ -266,7 +274,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
266
274
267
275
fn visit_sub_mod_inner (
268
276
& mut self ,
269
- sub_mod : Module < ' ast > ,
277
+ sub_mod : Module < ' _ > ,
270
278
sub_mod_kind : SubModKind < ' c , ' ast > ,
271
279
from_ast : bool ,
272
280
) -> Result < ( ) , ModuleResolutionError > {
@@ -297,17 +305,15 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
297
305
298
306
fn visit_sub_mod_after_directory_update (
299
307
& mut self ,
300
- sub_mod : Module < ' ast > ,
308
+ sub_mod : Module < ' _ > ,
301
309
directory : Option < Directory > ,
302
310
from_ast : bool ,
303
311
) -> Result < ( ) , ModuleResolutionError > {
304
312
if let Some ( directory) = directory {
305
313
self . directory = directory;
306
314
}
307
315
if from_ast {
308
- if let Cow :: Borrowed ( items) = sub_mod. items {
309
- self . visit_mod_from_ast ( items) ?;
310
- }
316
+ self . visit_mod_from_ast ( & sub_mod. items ) ?;
311
317
} else {
312
318
self . visit_mod_outside_ast ( & sub_mod. items ) ?;
313
319
}
@@ -319,7 +325,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
319
325
& self ,
320
326
mod_name : symbol:: Ident ,
321
327
attrs : & [ ast:: Attribute ] ,
322
- sub_mod : & Module < ' ast > ,
328
+ sub_mod : & Module < ' _ > ,
323
329
) -> Result < Option < SubModKind < ' c , ' ast > > , ModuleResolutionError > {
324
330
let relative = match self . directory . ownership {
325
331
DirectoryOwnership :: Owned { relative } => relative,
@@ -368,7 +374,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
368
374
return Ok ( None ) ;
369
375
} else {
370
376
if should_insert {
371
- mods_outside_ast. push ( ( file_path, dir_ownership, sub_mod. clone ( ) ) ) ;
377
+ mods_outside_ast. push ( ( file_path, dir_ownership, sub_mod. to_owned ( ) ) ) ;
372
378
}
373
379
return Ok ( Some ( SubModKind :: MultiExternal ( mods_outside_ast) ) ) ;
374
380
}
@@ -389,7 +395,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
389
395
Module :: new ( span, Cow :: Owned ( items) , & attrs) ,
390
396
) ) ;
391
397
if should_insert {
392
- mods_outside_ast. push ( ( file_path, dir_ownership, sub_mod. clone ( ) ) ) ;
398
+ mods_outside_ast. push ( ( file_path, dir_ownership, sub_mod. to_owned ( ) ) ) ;
393
399
}
394
400
Ok ( Some ( SubModKind :: MultiExternal ( mods_outside_ast) ) )
395
401
}
@@ -403,7 +409,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
403
409
} ) ,
404
410
Err ( ..) => {
405
411
if should_insert {
406
- mods_outside_ast. push ( ( file_path, dir_ownership, sub_mod. clone ( ) ) ) ;
412
+ mods_outside_ast. push ( ( file_path, dir_ownership, sub_mod. to_owned ( ) ) ) ;
407
413
}
408
414
Ok ( Some ( SubModKind :: MultiExternal ( mods_outside_ast) ) )
409
415
}
@@ -474,7 +480,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
474
480
fn find_mods_outside_of_ast (
475
481
& self ,
476
482
attrs : & [ ast:: Attribute ] ,
477
- sub_mod : & Module < ' ast > ,
483
+ sub_mod : & Module < ' _ > ,
478
484
) -> Vec < ( PathBuf , DirectoryOwnership , Module < ' ast > ) > {
479
485
// Filter nested path, like `#[cfg_attr(feature = "foo", path = "bar.rs")]`.
480
486
let mut path_visitor = visitor:: PathVisitor :: default ( ) ;
@@ -495,7 +501,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
495
501
result. push ( (
496
502
actual_path,
497
503
DirectoryOwnership :: Owned { relative : None } ,
498
- sub_mod. clone ( ) ,
504
+ sub_mod. to_owned ( ) ,
499
505
) ) ;
500
506
continue ;
501
507
}
0 commit comments