Skip to content

Commit 59de7f8

Browse files
committed
Add ident.unhygienize() and use Ident more instead of Name in resolve.
1 parent 83ab9f7 commit 59de7f8

File tree

5 files changed

+156
-150
lines changed

5 files changed

+156
-150
lines changed

src/librustc_resolve/build_reduced_graph.rs

Lines changed: 54 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ use rustc::ty;
2828
use std::cell::Cell;
2929
use std::rc::Rc;
3030

31-
use syntax::ast::Name;
31+
use syntax::ast::{Name, Ident};
3232
use syntax::attr;
3333

3434
use syntax::ast::{self, Block, ForeignItem, ForeignItemKind, Item, ItemKind};
@@ -76,12 +76,12 @@ struct LegacyMacroImports {
7676
impl<'b> Resolver<'b> {
7777
/// Defines `name` in namespace `ns` of module `parent` to be `def` if it is not yet defined;
7878
/// 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)
8080
where T: ToNameBinding<'b>,
8181
{
8282
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);
8585
}
8686
}
8787

@@ -102,7 +102,7 @@ impl<'b> Resolver<'b> {
102102
/// Constructs the reduced graph for one item.
103103
fn build_reduced_graph_for_item(&mut self, item: &Item, expansion: Mark) {
104104
let parent = self.current_module;
105-
let name = item.ident.name;
105+
let ident = item.ident;
106106
let sp = item.span;
107107
let vis = self.resolve_visibility(&item.vis);
108108

@@ -157,8 +157,8 @@ impl<'b> Resolver<'b> {
157157
}
158158

159159
let subclass = SingleImport {
160-
target: binding.name,
161-
source: source.name,
160+
target: binding,
161+
source: source,
162162
result: self.per_ns(|_, _| Cell::new(Err(Undetermined))),
163163
};
164164
self.add_import_directive(
@@ -187,13 +187,13 @@ impl<'b> Resolver<'b> {
187187

188188
for source_item in source_items {
189189
let node = source_item.node;
190-
let (module_path, name, rename) = {
190+
let (module_path, ident, rename) = {
191191
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)
194194
} else {
195-
let name = match module_path.last() {
196-
Some(ident) => ident.name,
195+
let ident = match module_path.last() {
196+
Some(&ident) => ident,
197197
None => {
198198
resolve_error(
199199
self,
@@ -205,13 +205,13 @@ impl<'b> Resolver<'b> {
205205
}
206206
};
207207
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)
210210
}
211211
};
212212
let subclass = SingleImport {
213213
target: rename,
214-
source: name,
214+
source: ident,
215215
result: self.per_ns(|_, _| Cell::new(Err(Undetermined))),
216216
};
217217
let id = source_item.node.id;
@@ -251,7 +251,7 @@ impl<'b> Resolver<'b> {
251251
expansion: expansion,
252252
});
253253
let imported_binding = self.import(binding, directive);
254-
self.define(parent, name, TypeNS, imported_binding);
254+
self.define(parent, ident, TypeNS, imported_binding);
255255
self.populate_module_if_necessary(module);
256256
self.process_legacy_macro_imports(item, module, expansion);
257257
}
@@ -265,9 +265,9 @@ impl<'b> Resolver<'b> {
265265
attr::contains_name(&item.attrs, "no_implicit_prelude")
266266
},
267267
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))
269269
});
270-
self.define(parent, name, TypeNS, (module, vis, sp, expansion));
270+
self.define(parent, ident, TypeNS, (module, vis, sp, expansion));
271271
self.module_map.insert(item.id, module);
272272

273273
// Descend into the module.
@@ -280,27 +280,27 @@ impl<'b> Resolver<'b> {
280280
ItemKind::Static(_, m, _) => {
281281
let mutbl = m == Mutability::Mutable;
282282
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));
284284
}
285285
ItemKind::Const(..) => {
286286
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));
288288
}
289289
ItemKind::Fn(..) => {
290290
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));
292292
}
293293

294294
// These items live in the type namespace.
295295
ItemKind::Ty(..) => {
296296
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));
298298
}
299299

300300
ItemKind::Enum(ref enum_definition, _) => {
301301
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));
304304

305305
for variant in &(*enum_definition).variants {
306306
self.build_reduced_graph_for_variant(variant, module, vis, expansion);
@@ -311,14 +311,14 @@ impl<'b> Resolver<'b> {
311311
ItemKind::Struct(ref struct_def, _) => {
312312
// Define a name in the type namespace.
313313
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));
315315

316316
// If this is a tuple or unit struct, define a name
317317
// in the value namespace as well.
318318
if !struct_def.is_struct() {
319319
let ctor_def = Def::StructCtor(self.definitions.local_def_id(struct_def.id()),
320320
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));
322322
}
323323

324324
// Record field names for error reporting.
@@ -332,7 +332,7 @@ impl<'b> Resolver<'b> {
332332

333333
ItemKind::Union(ref vdata, _) => {
334334
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));
336336

337337
// Record field names for error reporting.
338338
let field_names = vdata.fields().iter().filter_map(|field| {
@@ -350,8 +350,8 @@ impl<'b> Resolver<'b> {
350350

351351
// Add all the items within to a new module.
352352
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));
355355
self.current_module = module;
356356
}
357357
ItemKind::Mac(_) => panic!("unexpanded macro in resolve!"),
@@ -365,26 +365,23 @@ impl<'b> Resolver<'b> {
365365
parent: Module<'b>,
366366
vis: ty::Visibility,
367367
expansion: Mark) {
368-
let name = variant.node.name.name;
368+
let ident = variant.node.name;
369369
let def_id = self.definitions.local_def_id(variant.node.data.id());
370370

371371
// Define a name in the type namespace.
372372
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));
374374

375375
// Define a constructor name in the value namespace.
376376
// Braced variants, unlike structs, generate unusable names in
377377
// value namespace, they are reserved for possible future use.
378378
let ctor_kind = CtorKind::from_ast(&variant.node.data);
379379
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));
381381
}
382382

383383
/// Constructs the reduced graph for one foreign item.
384384
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-
388385
let def = match item.node {
389386
ForeignItemKind::Fn(..) => {
390387
Def::Fn(self.definitions.local_def_id(item.id))
@@ -393,8 +390,9 @@ impl<'b> Resolver<'b> {
393390
Def::Static(self.definitions.local_def_id(item.id), m)
394391
}
395392
};
393+
let parent = self.current_module;
396394
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));
398396
}
399397

400398
fn build_reduced_graph_for_block(&mut self, block: &Block) {
@@ -414,7 +412,7 @@ impl<'b> Resolver<'b> {
414412

415413
/// Builds the reduced graph for a single item in an external crate.
416414
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);
418416
let def = child.def;
419417
let def_id = def.def_id();
420418
let vis = match def {
@@ -425,25 +423,25 @@ impl<'b> Resolver<'b> {
425423

426424
match def {
427425
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()));
430428
}
431429
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()));
433431
}
434432
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()));
436434
}
437435
Def::Fn(..) |
438436
Def::Static(..) |
439437
Def::Const(..) |
440438
Def::AssociatedConst(..) |
441439
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()));
443441
}
444442
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()));
447445

448446
// If this is a trait, add all the trait item names to the trait info.
449447
let trait_item_def_ids = self.session.cstore.associated_item_def_ids(def_id);
@@ -455,27 +453,27 @@ impl<'b> Resolver<'b> {
455453
}
456454
}
457455
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()));
459457
}
460458
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()));
462460

463461
// Record field names for error reporting.
464462
let field_names = self.session.cstore.struct_field_names(def_id);
465463
self.insert_field_names(def_id, field_names);
466464
}
467465
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()));
469467
}
470468
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()));
472470

473471
// Record field names for error reporting.
474472
let field_names = self.session.cstore.struct_field_names(def_id);
475473
self.insert_field_names(def_id, field_names);
476474
}
477475
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()));
479477
}
480478
Def::Local(..) |
481479
Def::PrimTy(..) |
@@ -574,12 +572,13 @@ impl<'b> Resolver<'b> {
574572
}
575573

576574
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);
579577
});
580578
} else {
581579
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);
583582
if let Ok(binding) = result {
584583
self.legacy_import_macro(name, binding, span, allow_shadowing);
585584
} else {
@@ -591,7 +590,8 @@ impl<'b> Resolver<'b> {
591590
let krate = module.def_id().unwrap().krate;
592591
self.used_crates.insert(krate);
593592
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);
595595
if let Ok(binding) = result {
596596
self.macro_exports.push(Export { name: name, def: binding.def() });
597597
} else {
@@ -759,7 +759,7 @@ impl<'a, 'b> Visitor<'a> for BuildReducedGraphVisitor<'a, 'b> {
759759
self.resolver.trait_item_map.insert((item.ident.name, def_id), is_static_method);
760760

761761
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));
763763

764764
self.resolver.current_module = parent.parent.unwrap(); // nearest normal ancestor
765765
visit::walk_trait_item(self, item);

0 commit comments

Comments
 (0)