@@ -28,7 +28,7 @@ use rustc::ty;
28
28
use std:: cell:: Cell ;
29
29
use std:: rc:: Rc ;
30
30
31
- use syntax:: ast:: Name ;
31
+ use syntax:: ast:: { Name , Ident } ;
32
32
use syntax:: attr;
33
33
34
34
use syntax:: ast:: { self , Block , ForeignItem , ForeignItemKind , Item , ItemKind } ;
@@ -76,12 +76,12 @@ struct LegacyMacroImports {
76
76
impl < ' b > Resolver < ' b > {
77
77
/// Defines `name` in namespace `ns` of module `parent` to be `def` if it is not yet defined;
78
78
/// otherwise, reports an error.
79
- fn define < T > ( & mut self , parent : Module < ' b > , name : Name , ns : Namespace , def : T )
79
+ fn define < T > ( & mut self , parent : Module < ' b > , ident : Ident , ns : Namespace , def : T )
80
80
where T : ToNameBinding < ' b > ,
81
81
{
82
82
let binding = def. to_name_binding ( ) ;
83
- if let Err ( old_binding) = self . try_define ( parent, name , ns, binding. clone ( ) ) {
84
- self . report_conflict ( parent, name , ns, old_binding, & binding) ;
83
+ if let Err ( old_binding) = self . try_define ( parent, ident , ns, binding. clone ( ) ) {
84
+ self . report_conflict ( parent, ident , ns, old_binding, & binding) ;
85
85
}
86
86
}
87
87
@@ -102,7 +102,7 @@ impl<'b> Resolver<'b> {
102
102
/// Constructs the reduced graph for one item.
103
103
fn build_reduced_graph_for_item ( & mut self , item : & Item , expansion : Mark ) {
104
104
let parent = self . current_module ;
105
- let name = item. ident . name ;
105
+ let ident = item. ident ;
106
106
let sp = item. span ;
107
107
let vis = self . resolve_visibility ( & item. vis ) ;
108
108
@@ -157,8 +157,8 @@ impl<'b> Resolver<'b> {
157
157
}
158
158
159
159
let subclass = SingleImport {
160
- target : binding. name ,
161
- source : source. name ,
160
+ target : binding,
161
+ source : source,
162
162
result : self . per_ns ( |_, _| Cell :: new ( Err ( Undetermined ) ) ) ,
163
163
} ;
164
164
self . add_import_directive (
@@ -187,13 +187,13 @@ impl<'b> Resolver<'b> {
187
187
188
188
for source_item in source_items {
189
189
let node = source_item. node ;
190
- let ( module_path, name , rename) = {
190
+ let ( module_path, ident , rename) = {
191
191
if node. name . name != keywords:: SelfValue . name ( ) {
192
- let rename = node. rename . unwrap_or ( node. name ) . name ;
193
- ( module_path. clone ( ) , node. name . name , rename)
192
+ let rename = node. rename . unwrap_or ( node. name ) ;
193
+ ( module_path. clone ( ) , node. name , rename)
194
194
} else {
195
- let name = match module_path. last ( ) {
196
- Some ( ident) => ident. name ,
195
+ let ident = match module_path. last ( ) {
196
+ Some ( & ident) => ident,
197
197
None => {
198
198
resolve_error (
199
199
self ,
@@ -205,13 +205,13 @@ impl<'b> Resolver<'b> {
205
205
}
206
206
} ;
207
207
let module_path = module_path. split_last ( ) . unwrap ( ) . 1 ;
208
- let rename = node. rename . map ( |i| i . name ) . unwrap_or ( name ) ;
209
- ( module_path. to_vec ( ) , name , rename)
208
+ let rename = node. rename . unwrap_or ( ident ) ;
209
+ ( module_path. to_vec ( ) , ident , rename)
210
210
}
211
211
} ;
212
212
let subclass = SingleImport {
213
213
target : rename,
214
- source : name ,
214
+ source : ident ,
215
215
result : self . per_ns ( |_, _| Cell :: new ( Err ( Undetermined ) ) ) ,
216
216
} ;
217
217
let id = source_item. node . id ;
@@ -251,7 +251,7 @@ impl<'b> Resolver<'b> {
251
251
expansion : expansion,
252
252
} ) ;
253
253
let imported_binding = self . import ( binding, directive) ;
254
- self . define ( parent, name , TypeNS , imported_binding) ;
254
+ self . define ( parent, ident , TypeNS , imported_binding) ;
255
255
self . populate_module_if_necessary ( module) ;
256
256
self . process_legacy_macro_imports ( item, module, expansion) ;
257
257
}
@@ -265,9 +265,9 @@ impl<'b> Resolver<'b> {
265
265
attr:: contains_name ( & item. attrs , "no_implicit_prelude" )
266
266
} ,
267
267
normal_ancestor_id : Some ( item. id ) ,
268
- ..ModuleS :: new ( Some ( parent) , ModuleKind :: Def ( def, name) )
268
+ ..ModuleS :: new ( Some ( parent) , ModuleKind :: Def ( def, ident . name ) )
269
269
} ) ;
270
- self . define ( parent, name , TypeNS , ( module, vis, sp, expansion) ) ;
270
+ self . define ( parent, ident , TypeNS , ( module, vis, sp, expansion) ) ;
271
271
self . module_map . insert ( item. id , module) ;
272
272
273
273
// Descend into the module.
@@ -280,27 +280,27 @@ impl<'b> Resolver<'b> {
280
280
ItemKind :: Static ( _, m, _) => {
281
281
let mutbl = m == Mutability :: Mutable ;
282
282
let def = Def :: Static ( self . definitions . local_def_id ( item. id ) , mutbl) ;
283
- self . define ( parent, name , ValueNS , ( def, vis, sp, expansion) ) ;
283
+ self . define ( parent, ident , ValueNS , ( def, vis, sp, expansion) ) ;
284
284
}
285
285
ItemKind :: Const ( ..) => {
286
286
let def = Def :: Const ( self . definitions . local_def_id ( item. id ) ) ;
287
- self . define ( parent, name , ValueNS , ( def, vis, sp, expansion) ) ;
287
+ self . define ( parent, ident , ValueNS , ( def, vis, sp, expansion) ) ;
288
288
}
289
289
ItemKind :: Fn ( ..) => {
290
290
let def = Def :: Fn ( self . definitions . local_def_id ( item. id ) ) ;
291
- self . define ( parent, name , ValueNS , ( def, vis, sp, expansion) ) ;
291
+ self . define ( parent, ident , ValueNS , ( def, vis, sp, expansion) ) ;
292
292
}
293
293
294
294
// These items live in the type namespace.
295
295
ItemKind :: Ty ( ..) => {
296
296
let def = Def :: TyAlias ( self . definitions . local_def_id ( item. id ) ) ;
297
- self . define ( parent, name , TypeNS , ( def, vis, sp, expansion) ) ;
297
+ self . define ( parent, ident , TypeNS , ( def, vis, sp, expansion) ) ;
298
298
}
299
299
300
300
ItemKind :: Enum ( ref enum_definition, _) => {
301
301
let def = Def :: Enum ( self . definitions . local_def_id ( item. id ) ) ;
302
- let module = self . new_module ( parent, ModuleKind :: Def ( def, name) , true ) ;
303
- self . define ( parent, name , TypeNS , ( module, vis, sp, expansion) ) ;
302
+ let module = self . new_module ( parent, ModuleKind :: Def ( def, ident . name ) , true ) ;
303
+ self . define ( parent, ident , TypeNS , ( module, vis, sp, expansion) ) ;
304
304
305
305
for variant in & ( * enum_definition) . variants {
306
306
self . build_reduced_graph_for_variant ( variant, module, vis, expansion) ;
@@ -311,14 +311,14 @@ impl<'b> Resolver<'b> {
311
311
ItemKind :: Struct ( ref struct_def, _) => {
312
312
// Define a name in the type namespace.
313
313
let def = Def :: Struct ( self . definitions . local_def_id ( item. id ) ) ;
314
- self . define ( parent, name , TypeNS , ( def, vis, sp, expansion) ) ;
314
+ self . define ( parent, ident , TypeNS , ( def, vis, sp, expansion) ) ;
315
315
316
316
// If this is a tuple or unit struct, define a name
317
317
// in the value namespace as well.
318
318
if !struct_def. is_struct ( ) {
319
319
let ctor_def = Def :: StructCtor ( self . definitions . local_def_id ( struct_def. id ( ) ) ,
320
320
CtorKind :: from_ast ( struct_def) ) ;
321
- self . define ( parent, name , ValueNS , ( ctor_def, vis, sp, expansion) ) ;
321
+ self . define ( parent, ident , ValueNS , ( ctor_def, vis, sp, expansion) ) ;
322
322
}
323
323
324
324
// Record field names for error reporting.
@@ -332,7 +332,7 @@ impl<'b> Resolver<'b> {
332
332
333
333
ItemKind :: Union ( ref vdata, _) => {
334
334
let def = Def :: Union ( self . definitions . local_def_id ( item. id ) ) ;
335
- self . define ( parent, name , TypeNS , ( def, vis, sp, expansion) ) ;
335
+ self . define ( parent, ident , TypeNS , ( def, vis, sp, expansion) ) ;
336
336
337
337
// Record field names for error reporting.
338
338
let field_names = vdata. fields ( ) . iter ( ) . filter_map ( |field| {
@@ -350,8 +350,8 @@ impl<'b> Resolver<'b> {
350
350
351
351
// Add all the items within to a new module.
352
352
let module =
353
- self . new_module ( parent, ModuleKind :: Def ( Def :: Trait ( def_id) , name) , true ) ;
354
- self . define ( parent, name , TypeNS , ( module, vis, sp, expansion) ) ;
353
+ self . new_module ( parent, ModuleKind :: Def ( Def :: Trait ( def_id) , ident . name ) , true ) ;
354
+ self . define ( parent, ident , TypeNS , ( module, vis, sp, expansion) ) ;
355
355
self . current_module = module;
356
356
}
357
357
ItemKind :: Mac ( _) => panic ! ( "unexpanded macro in resolve!" ) ,
@@ -365,26 +365,23 @@ impl<'b> Resolver<'b> {
365
365
parent : Module < ' b > ,
366
366
vis : ty:: Visibility ,
367
367
expansion : Mark ) {
368
- let name = variant. node . name . name ;
368
+ let ident = variant. node . name ;
369
369
let def_id = self . definitions . local_def_id ( variant. node . data . id ( ) ) ;
370
370
371
371
// Define a name in the type namespace.
372
372
let def = Def :: Variant ( def_id) ;
373
- self . define ( parent, name , TypeNS , ( def, vis, variant. span , expansion) ) ;
373
+ self . define ( parent, ident , TypeNS , ( def, vis, variant. span , expansion) ) ;
374
374
375
375
// Define a constructor name in the value namespace.
376
376
// Braced variants, unlike structs, generate unusable names in
377
377
// value namespace, they are reserved for possible future use.
378
378
let ctor_kind = CtorKind :: from_ast ( & variant. node . data ) ;
379
379
let ctor_def = Def :: VariantCtor ( def_id, ctor_kind) ;
380
- self . define ( parent, name , ValueNS , ( ctor_def, vis, variant. span , expansion) ) ;
380
+ self . define ( parent, ident , ValueNS , ( ctor_def, vis, variant. span , expansion) ) ;
381
381
}
382
382
383
383
/// Constructs the reduced graph for one foreign item.
384
384
fn build_reduced_graph_for_foreign_item ( & mut self , item : & ForeignItem , expansion : Mark ) {
385
- let parent = self . current_module ;
386
- let name = item. ident . name ;
387
-
388
385
let def = match item. node {
389
386
ForeignItemKind :: Fn ( ..) => {
390
387
Def :: Fn ( self . definitions . local_def_id ( item. id ) )
@@ -393,8 +390,9 @@ impl<'b> Resolver<'b> {
393
390
Def :: Static ( self . definitions . local_def_id ( item. id ) , m)
394
391
}
395
392
} ;
393
+ let parent = self . current_module ;
396
394
let vis = self . resolve_visibility ( & item. vis ) ;
397
- self . define ( parent, name , ValueNS , ( def, vis, item. span , expansion) ) ;
395
+ self . define ( parent, item . ident , ValueNS , ( def, vis, item. span , expansion) ) ;
398
396
}
399
397
400
398
fn build_reduced_graph_for_block ( & mut self , block : & Block ) {
@@ -414,7 +412,7 @@ impl<'b> Resolver<'b> {
414
412
415
413
/// Builds the reduced graph for a single item in an external crate.
416
414
fn build_reduced_graph_for_external_crate_def ( & mut self , parent : Module < ' b > , child : Export ) {
417
- let name = child. name ;
415
+ let ident = Ident :: with_empty_ctxt ( child. name ) ;
418
416
let def = child. def ;
419
417
let def_id = def. def_id ( ) ;
420
418
let vis = match def {
@@ -425,25 +423,25 @@ impl<'b> Resolver<'b> {
425
423
426
424
match def {
427
425
Def :: Mod ( ..) | Def :: Enum ( ..) => {
428
- let module = self . new_module ( parent, ModuleKind :: Def ( def, name) , false ) ;
429
- self . define ( parent, name , TypeNS , ( module, vis, DUMMY_SP , Mark :: root ( ) ) ) ;
426
+ let module = self . new_module ( parent, ModuleKind :: Def ( def, ident . name ) , false ) ;
427
+ self . define ( parent, ident , TypeNS , ( module, vis, DUMMY_SP , Mark :: root ( ) ) ) ;
430
428
}
431
429
Def :: Variant ( ..) => {
432
- self . define ( parent, name , TypeNS , ( def, vis, DUMMY_SP , Mark :: root ( ) ) ) ;
430
+ self . define ( parent, ident , TypeNS , ( def, vis, DUMMY_SP , Mark :: root ( ) ) ) ;
433
431
}
434
432
Def :: VariantCtor ( ..) => {
435
- self . define ( parent, name , ValueNS , ( def, vis, DUMMY_SP , Mark :: root ( ) ) ) ;
433
+ self . define ( parent, ident , ValueNS , ( def, vis, DUMMY_SP , Mark :: root ( ) ) ) ;
436
434
}
437
435
Def :: Fn ( ..) |
438
436
Def :: Static ( ..) |
439
437
Def :: Const ( ..) |
440
438
Def :: AssociatedConst ( ..) |
441
439
Def :: Method ( ..) => {
442
- self . define ( parent, name , ValueNS , ( def, vis, DUMMY_SP , Mark :: root ( ) ) ) ;
440
+ self . define ( parent, ident , ValueNS , ( def, vis, DUMMY_SP , Mark :: root ( ) ) ) ;
443
441
}
444
442
Def :: Trait ( ..) => {
445
- let module = self . new_module ( parent, ModuleKind :: Def ( def, name) , false ) ;
446
- self . define ( parent, name , TypeNS , ( module, vis, DUMMY_SP , Mark :: root ( ) ) ) ;
443
+ let module = self . new_module ( parent, ModuleKind :: Def ( def, ident . name ) , false ) ;
444
+ self . define ( parent, ident , TypeNS , ( module, vis, DUMMY_SP , Mark :: root ( ) ) ) ;
447
445
448
446
// If this is a trait, add all the trait item names to the trait info.
449
447
let trait_item_def_ids = self . session . cstore . associated_item_def_ids ( def_id) ;
@@ -455,27 +453,27 @@ impl<'b> Resolver<'b> {
455
453
}
456
454
}
457
455
Def :: TyAlias ( ..) | Def :: AssociatedTy ( ..) => {
458
- self . define ( parent, name , TypeNS , ( def, vis, DUMMY_SP , Mark :: root ( ) ) ) ;
456
+ self . define ( parent, ident , TypeNS , ( def, vis, DUMMY_SP , Mark :: root ( ) ) ) ;
459
457
}
460
458
Def :: Struct ( ..) => {
461
- self . define ( parent, name , TypeNS , ( def, vis, DUMMY_SP , Mark :: root ( ) ) ) ;
459
+ self . define ( parent, ident , TypeNS , ( def, vis, DUMMY_SP , Mark :: root ( ) ) ) ;
462
460
463
461
// Record field names for error reporting.
464
462
let field_names = self . session . cstore . struct_field_names ( def_id) ;
465
463
self . insert_field_names ( def_id, field_names) ;
466
464
}
467
465
Def :: StructCtor ( ..) => {
468
- self . define ( parent, name , ValueNS , ( def, vis, DUMMY_SP , Mark :: root ( ) ) ) ;
466
+ self . define ( parent, ident , ValueNS , ( def, vis, DUMMY_SP , Mark :: root ( ) ) ) ;
469
467
}
470
468
Def :: Union ( ..) => {
471
- self . define ( parent, name , TypeNS , ( def, vis, DUMMY_SP , Mark :: root ( ) ) ) ;
469
+ self . define ( parent, ident , TypeNS , ( def, vis, DUMMY_SP , Mark :: root ( ) ) ) ;
472
470
473
471
// Record field names for error reporting.
474
472
let field_names = self . session . cstore . struct_field_names ( def_id) ;
475
473
self . insert_field_names ( def_id, field_names) ;
476
474
}
477
475
Def :: Macro ( ..) => {
478
- self . define ( parent, name , MacroNS , ( def, vis, DUMMY_SP , Mark :: root ( ) ) ) ;
476
+ self . define ( parent, ident , MacroNS , ( def, vis, DUMMY_SP , Mark :: root ( ) ) ) ;
479
477
}
480
478
Def :: Local ( ..) |
481
479
Def :: PrimTy ( ..) |
@@ -574,12 +572,13 @@ impl<'b> Resolver<'b> {
574
572
}
575
573
576
574
if let Some ( span) = legacy_imports. import_all {
577
- module. for_each_child ( |name , ns, binding| if ns == MacroNS {
578
- self . legacy_import_macro ( name, binding, span, allow_shadowing) ;
575
+ module. for_each_child ( |ident , ns, binding| if ns == MacroNS {
576
+ self . legacy_import_macro ( ident . name , binding, span, allow_shadowing) ;
579
577
} ) ;
580
578
} else {
581
579
for ( name, span) in legacy_imports. imports {
582
- let result = self . resolve_name_in_module ( module, name, MacroNS , false , None ) ;
580
+ let ident = Ident :: with_empty_ctxt ( name) ;
581
+ let result = self . resolve_ident_in_module ( module, ident, MacroNS , false , None ) ;
583
582
if let Ok ( binding) = result {
584
583
self . legacy_import_macro ( name, binding, span, allow_shadowing) ;
585
584
} else {
@@ -591,7 +590,8 @@ impl<'b> Resolver<'b> {
591
590
let krate = module. def_id ( ) . unwrap ( ) . krate ;
592
591
self . used_crates . insert ( krate) ;
593
592
self . session . cstore . export_macros ( krate) ;
594
- let result = self . resolve_name_in_module ( module, name, MacroNS , false , None ) ;
593
+ let ident = Ident :: with_empty_ctxt ( name) ;
594
+ let result = self . resolve_ident_in_module ( module, ident, MacroNS , false , None ) ;
595
595
if let Ok ( binding) = result {
596
596
self . macro_exports . push ( Export { name : name, def : binding. def ( ) } ) ;
597
597
} else {
@@ -759,7 +759,7 @@ impl<'a, 'b> Visitor<'a> for BuildReducedGraphVisitor<'a, 'b> {
759
759
self . resolver . trait_item_map . insert ( ( item. ident . name , def_id) , is_static_method) ;
760
760
761
761
let vis = ty:: Visibility :: Public ;
762
- self . resolver . define ( parent, item. ident . name , ns, ( def, vis, item. span , self . expansion ) ) ;
762
+ self . resolver . define ( parent, item. ident , ns, ( def, vis, item. span , self . expansion ) ) ;
763
763
764
764
self . resolver . current_module = parent. parent . unwrap ( ) ; // nearest normal ancestor
765
765
visit:: walk_trait_item ( self , item) ;
0 commit comments