14
14
//! any imports resolved.
15
15
16
16
use resolve_imports:: ImportDirectiveSubclass :: { self , GlobImport } ;
17
- use { Module , ModuleKind } ;
17
+ use { Module , ModuleS , ModuleKind } ;
18
18
use Namespace :: { self , TypeNS , ValueNS } ;
19
19
use { NameBinding , NameBindingKind , ToNameBinding } ;
20
20
use Resolver ;
@@ -55,8 +55,6 @@ impl<'a> ToNameBinding<'a> for (Def, Span, ty::Visibility) {
55
55
impl < ' b > Resolver < ' b > {
56
56
/// Constructs the reduced graph for the entire crate.
57
57
pub fn build_reduced_graph ( & mut self , krate : & Crate ) {
58
- let no_implicit_prelude = attr:: contains_name ( & krate. attrs , "no_implicit_prelude" ) ;
59
- self . graph_root . no_implicit_prelude . set ( no_implicit_prelude) ;
60
58
visit:: walk_crate ( & mut BuildReducedGraphVisitor { resolver : self } , krate) ;
61
59
}
62
60
@@ -195,8 +193,11 @@ impl<'b> Resolver<'b> {
195
193
krate : crate_id,
196
194
index : CRATE_DEF_INDEX ,
197
195
} ;
198
- let def = Def :: Mod ( def_id) ;
199
- let module = self . new_extern_crate_module ( parent, name, def, item. id ) ;
196
+ let module = self . arenas . alloc_module ( ModuleS {
197
+ extern_crate_id : Some ( item. id ) ,
198
+ populated : Cell :: new ( false ) ,
199
+ ..ModuleS :: new ( Some ( parent) , ModuleKind :: Def ( Def :: Mod ( def_id) , name) )
200
+ } ) ;
200
201
self . define ( parent, name, TypeNS , ( module, sp, vis) ) ;
201
202
202
203
self . populate_module_if_necessary ( module) ;
@@ -205,10 +206,12 @@ impl<'b> Resolver<'b> {
205
206
206
207
ItemKind :: Mod ( ..) => {
207
208
let def = Def :: Mod ( self . definitions . local_def_id ( item. id ) ) ;
208
- let module = self . new_module ( parent, ModuleKind :: Def ( def, name) , Some ( item. id ) ) ;
209
- module. no_implicit_prelude . set ( {
210
- parent. no_implicit_prelude . get ( ) ||
209
+ let module = self . arenas . alloc_module ( ModuleS {
210
+ no_implicit_prelude : parent. no_implicit_prelude || {
211
211
attr:: contains_name ( & item. attrs , "no_implicit_prelude" )
212
+ } ,
213
+ normal_ancestor_id : Some ( item. id ) ,
214
+ ..ModuleS :: new ( Some ( parent) , ModuleKind :: Def ( def, name) )
212
215
} ) ;
213
216
self . define ( parent, name, TypeNS , ( module, sp, vis) ) ;
214
217
self . module_map . insert ( item. id , module) ;
@@ -241,8 +244,8 @@ impl<'b> Resolver<'b> {
241
244
}
242
245
243
246
ItemKind :: Enum ( ref enum_definition, _) => {
244
- let kind = ModuleKind :: Def ( Def :: Enum ( self . definitions . local_def_id ( item. id ) ) , name ) ;
245
- let module = self . new_module ( parent, kind , parent . normal_ancestor_id ) ;
247
+ let def = Def :: Enum ( self . definitions . local_def_id ( item. id ) ) ;
248
+ let module = self . new_module ( parent, ModuleKind :: Def ( def , name ) , true ) ;
246
249
self . define ( parent, name, TypeNS , ( module, sp, vis) ) ;
247
250
248
251
for variant in & ( * enum_definition) . variants {
@@ -293,8 +296,8 @@ impl<'b> Resolver<'b> {
293
296
let def_id = self . definitions . local_def_id ( item. id ) ;
294
297
295
298
// Add all the items within to a new module.
296
- let kind = ModuleKind :: Def ( Def :: Trait ( def_id ) , name ) ;
297
- let module = self . new_module ( parent, kind , parent . normal_ancestor_id ) ;
299
+ let module =
300
+ self . new_module ( parent, ModuleKind :: Def ( Def :: Trait ( def_id ) , name ) , true ) ;
298
301
self . define ( parent, name, TypeNS , ( module, sp, vis) ) ;
299
302
self . current_module = module;
300
303
}
@@ -348,8 +351,7 @@ impl<'b> Resolver<'b> {
348
351
{}",
349
352
block_id) ;
350
353
351
- let new_module =
352
- self . new_module ( parent, ModuleKind :: Block ( block_id) , parent. normal_ancestor_id ) ;
354
+ let new_module = self . new_module ( parent, ModuleKind :: Block ( block_id) , true ) ;
353
355
self . module_map . insert ( block_id, new_module) ;
354
356
self . current_module = new_module; // Descend into the block.
355
357
}
@@ -377,7 +379,7 @@ impl<'b> Resolver<'b> {
377
379
Def :: Mod ( _) | Def :: Enum ( ..) => {
378
380
debug ! ( "(building reduced graph for external crate) building module {} {:?}" ,
379
381
name, vis) ;
380
- let module = self . new_module ( parent, ModuleKind :: Def ( def, name) , None ) ;
382
+ let module = self . new_module ( parent, ModuleKind :: Def ( def, name) , false ) ;
381
383
let _ = self . try_define ( parent, name, TypeNS , ( module, DUMMY_SP , vis) ) ;
382
384
}
383
385
Def :: Variant ( variant_id) => {
@@ -420,7 +422,7 @@ impl<'b> Resolver<'b> {
420
422
self . trait_item_map . insert ( ( trait_item_name, def_id) , false ) ;
421
423
}
422
424
423
- let module = self . new_module ( parent, ModuleKind :: Def ( def, name) , None ) ;
425
+ let module = self . new_module ( parent, ModuleKind :: Def ( def, name) , false ) ;
424
426
let _ = self . try_define ( parent, name, TypeNS , ( module, DUMMY_SP , vis) ) ;
425
427
}
426
428
Def :: TyAlias ( ..) | Def :: AssociatedTy ( ..) => {
0 commit comments