diff options
| author | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2018-06-10 19:33:30 +0300 |
|---|---|---|
| committer | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2018-06-28 11:04:50 +0300 |
| commit | c6ca1e4abdb9476d8aa68457414ef80c5249caee (patch) | |
| tree | 1961ad3278476514ec8249654e2fd5bbbb87a1ea | |
| parent | e8215a4f6f7b32d0f068e72ab9a9c9f85bab0cdb (diff) | |
| download | rust-c6ca1e4abdb9476d8aa68457414ef80c5249caee.tar.gz rust-c6ca1e4abdb9476d8aa68457414ef80c5249caee.zip | |
Use `Ident`s in a number of structures in HIR
Namely: labels, type parameters, bindings in patterns, parameter names in functions without body. All of these do not need hygiene after lowering to HIR, only span locations.
24 files changed, 125 insertions, 156 deletions
diff --git a/src/librustc/hir/intravisit.rs b/src/librustc/hir/intravisit.rs index 29507474aa1..61583d99894 100644 --- a/src/librustc/hir/intravisit.rs +++ b/src/librustc/hir/intravisit.rs @@ -426,7 +426,7 @@ pub fn walk_ident<'v, V: Visitor<'v>>(visitor: &mut V, ident: Ident) { } pub fn walk_label<'v, V: Visitor<'v>>(visitor: &mut V, label: &'v Label) { - visitor.visit_name(label.span, label.name); + visitor.visit_ident(label.ident); } pub fn walk_lifetime<'v, V: Visitor<'v>>(visitor: &mut V, lifetime: &'v Lifetime) { @@ -689,9 +689,9 @@ pub fn walk_pat<'v, V: Visitor<'v>>(visitor: &mut V, pattern: &'v Pat) { PatKind::Ref(ref subpattern, _) => { visitor.visit_pat(subpattern) } - PatKind::Binding(_, canonical_id, ref pth1, ref optional_subpattern) => { + PatKind::Binding(_, canonical_id, ident, ref optional_subpattern) => { visitor.visit_def_mention(Def::Local(canonical_id)); - visitor.visit_name(pth1.span, pth1.node); + visitor.visit_ident(ident); walk_list!(visitor, visit_pat, optional_subpattern); } PatKind::Lit(ref expression) => visitor.visit_expr(expression), @@ -714,11 +714,11 @@ pub fn walk_foreign_item<'v, V: Visitor<'v>>(visitor: &mut V, foreign_item: &'v visitor.visit_name(foreign_item.span, foreign_item.name); match foreign_item.node { - ForeignItemFn(ref function_declaration, ref names, ref generics) => { + ForeignItemFn(ref function_declaration, ref param_names, ref generics) => { visitor.visit_generics(generics); visitor.visit_fn_decl(function_declaration); - for name in names { - visitor.visit_name(name.span, name.node); + for ¶m_name in param_names { + visitor.visit_ident(param_name); } } ForeignItemStatic(ref typ, _) => visitor.visit_ty(typ), @@ -832,11 +832,11 @@ pub fn walk_trait_item<'v, V: Visitor<'v>>(visitor: &mut V, trait_item: &'v Trai visitor.visit_ty(ty); walk_list!(visitor, visit_nested_body, default); } - TraitItemKind::Method(ref sig, TraitMethod::Required(ref names)) => { + TraitItemKind::Method(ref sig, TraitMethod::Required(ref param_names)) => { visitor.visit_id(trait_item.id); visitor.visit_fn_decl(&sig.decl); - for name in names { - visitor.visit_name(name.span, name.node); + for ¶m_name in param_names { + visitor.visit_ident(param_name); } } TraitItemKind::Method(ref sig, TraitMethod::Provided(body_id)) => { diff --git a/src/librustc/hir/lowering.rs b/src/librustc/hir/lowering.rs index 5a0e9c36b91..49675f6dc08 100644 --- a/src/librustc/hir/lowering.rs +++ b/src/librustc/hir/lowering.rs @@ -969,8 +969,7 @@ impl<'a> LoweringContext<'a> { fn lower_label(&mut self, label: Option<Label>) -> Option<hir::Label> { label.map(|label| hir::Label { - name: label.ident.name, - span: label.ident.span, + ident: label.ident, }) } @@ -1195,11 +1194,10 @@ impl<'a> LoweringContext<'a> { let hir_bounds = self.lower_param_bounds(bounds, itctx); // Set the name to `impl Bound1 + Bound2` - let ident = Ident::from_str(&pprust::ty_to_string(t)); + let ident = Ident::from_str(&pprust::ty_to_string(t)).with_span_pos(span); self.in_band_ty_params.push(hir::GenericParam { id: def_node_id, - name: ParamName::Plain(name), - span, + ident: ParamName::Plain(ident), pure_wrt_drop: false, attrs: hir_vec![], bounds: hir_bounds, @@ -1868,12 +1866,12 @@ impl<'a> LoweringContext<'a> { } } - fn lower_fn_args_to_names(&mut self, decl: &FnDecl) -> hir::HirVec<Spanned<Name>> { + fn lower_fn_args_to_names(&mut self, decl: &FnDecl) -> hir::HirVec<Ident> { decl.inputs .iter() .map(|arg| match arg.pat.node { - PatKind::Ident(_, ident, None) => respan(ident.span, ident.name), - _ => respan(arg.pat.span, keywords::Invalid.name()), + PatKind::Ident(_, ident, _) => ident, + _ => Ident::new(keywords::Invalid.name(), arg.pat.span), }) .collect() } @@ -3298,7 +3296,7 @@ impl<'a> LoweringContext<'a> { hir::PatKind::Binding( self.lower_binding_mode(binding_mode), canonical_id, - respan(ident.span, ident.name), + ident, sub.as_ref().map(|x| self.lower_pat(x)), ) } @@ -4524,7 +4522,7 @@ impl<'a> LoweringContext<'a> { P(hir::Pat { id: node_id, hir_id, - node: hir::PatKind::Binding(bm, node_id, Spanned { span, node: ident.name }, None), + node: hir::PatKind::Binding(bm, node_id, ident.with_span_pos(span), None), span, }) } diff --git a/src/librustc/hir/map/mod.rs b/src/librustc/hir/map/mod.rs index 8c2f4e89352..2c21d15f7ec 100644 --- a/src/librustc/hir/map/mod.rs +++ b/src/librustc/hir/map/mod.rs @@ -616,7 +616,7 @@ impl<'hir> Map<'hir> { NodeItem(&Item { node: ItemTrait(..), .. }) => { keywords::SelfType.name() } - NodeGenericParam(param) => param.name.name(), + NodeGenericParam(param) => param.name.ident(), _ => bug!("ty_param_name: {} not a type parameter", self.node_to_string(id)), } } @@ -1021,7 +1021,7 @@ impl<'hir> Map<'hir> { Some(EntryBlock(_, _, block)) => block.span, Some(EntryStructCtor(_, _, _)) => self.expect_item(self.get_parent(id)).span, Some(EntryLifetime(_, _, lifetime)) => lifetime.span, - Some(EntryGenericParam(_, _, param)) => param.span, + Some(EntryGenericParam(_, _, param)) => param.ident.span, Some(EntryVisibility(_, _, &Visibility::Restricted { ref path, .. })) => path.span, Some(EntryVisibility(_, _, v)) => bug!("unexpected Visibility {:?}", v), Some(EntryLocal(_, _, local)) => local.span, diff --git a/src/librustc/hir/mod.rs b/src/librustc/hir/mod.rs index 44c67b6e89a..47150d3d2c5 100644 --- a/src/librustc/hir/mod.rs +++ b/src/librustc/hir/mod.rs @@ -175,13 +175,12 @@ pub const DUMMY_ITEM_LOCAL_ID: ItemLocalId = ItemLocalId(!0); #[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Copy)] pub struct Label { - pub name: Name, - pub span: Span, + pub ident: Ident, } impl fmt::Debug for Label { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "label({:?})", self.name) + write!(f, "label({:?})", self.ident) } } @@ -493,7 +492,6 @@ pub struct GenericParam { pub name: ParamName, pub attrs: HirVec<Attribute>, pub bounds: GenericBounds, - pub span: Span, pub pure_wrt_drop: bool, pub kind: GenericParamKind, @@ -872,7 +870,7 @@ pub enum PatKind { /// The `NodeId` is the canonical ID for the variable being bound, /// e.g. in `Ok(x) | Err(x)`, both `x` use the same canonical ID, /// which is the pattern ID of the first `x`. - Binding(BindingAnnotation, NodeId, Spanned<Name>, Option<P<Pat>>), + Binding(BindingAnnotation, NodeId, Ident, Option<P<Pat>>), /// A struct or struct variant pattern, e.g. `Variant {x, y, ..}`. /// The `bool` is `true` in the presence of a `..`. @@ -1550,7 +1548,7 @@ pub struct TraitItem { #[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)] pub enum TraitMethod { /// No default body in the trait, just a signature. - Required(HirVec<Spanned<Name>>), + Required(HirVec<Ident>), /// Both signature and body are provided in the trait. Provided(BodyId), @@ -1645,7 +1643,7 @@ pub struct BareFnTy { pub abi: Abi, pub generic_params: HirVec<GenericParam>, pub decl: P<FnDecl>, - pub arg_names: HirVec<Spanned<Name>>, + pub arg_names: HirVec<Ident>, } #[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)] @@ -2185,7 +2183,7 @@ pub struct ForeignItem { #[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)] pub enum ForeignItem_ { /// A foreign function - ForeignItemFn(P<FnDecl>, HirVec<Spanned<Name>>, Generics), + ForeignItemFn(P<FnDecl>, HirVec<Ident>, Generics), /// A foreign static item (`static ext: u8`), with optional mutability /// (the boolean is true when mutable) ForeignItemStatic(P<Ty>, bool), diff --git a/src/librustc/hir/pat_util.rs b/src/librustc/hir/pat_util.rs index 5a059b6a219..14989f1ff7d 100644 --- a/src/librustc/hir/pat_util.rs +++ b/src/librustc/hir/pat_util.rs @@ -12,7 +12,6 @@ use hir::def::Def; use hir::def_id::DefId; use hir::{self, HirId, PatKind}; use syntax::ast; -use syntax::codemap::Spanned; use syntax_pos::Span; use std::iter::{Enumerate, ExactSizeIterator}; @@ -91,11 +90,11 @@ impl hir::Pat { /// Call `f` on every "binding" in a pattern, e.g., on `a` in /// `match foo() { Some(a) => (), None => () }` pub fn each_binding<F>(&self, mut f: F) - where F: FnMut(hir::BindingAnnotation, HirId, Span, &Spanned<ast::Name>), + where F: FnMut(hir::BindingAnnotation, HirId, Span, ast::Ident), { self.walk(|p| { - if let PatKind::Binding(binding_mode, _, ref pth, _) = p.node { - f(binding_mode, p.hir_id, p.span, pth); + if let PatKind::Binding(binding_mode, _, ident, _) = p.node { + f(binding_mode, p.hir_id, p.span, ident); } true }); @@ -132,20 +131,10 @@ impl hir::Pat { contains_bindings } - pub fn simple_name(&self) -> Option<ast::Name> { + pub fn simple_ident(&self) -> Option<ast::Ident> { match self.node { - PatKind::Binding(hir::BindingAnnotation::Unannotated, _, ref path1, None) | - PatKind::Binding(hir::BindingAnnotation::Mutable, _, ref path1, None) => - Some(path1.node), - _ => None, - } - } - - pub fn simple_span(&self) -> Option<Span> { - match self.node { - PatKind::Binding(hir::BindingAnnotation::Unannotated, _, ref path1, None) | - PatKind::Binding(hir::BindingAnnotation::Mutable, _, ref path1, None) => - Some(path1.span), + PatKind::Binding(hir::BindingAnnotation::Unannotated, _, ident, None) | + PatKind::Binding(hir::BindingAnnotation::Mutable, _, ident, None) => Some(ident), _ => None, } } diff --git a/src/librustc/hir/print.rs b/src/librustc/hir/print.rs index dc1883aebd5..81f10b1be7f 100644 --- a/src/librustc/hir/print.rs +++ b/src/librustc/hir/print.rs @@ -12,7 +12,7 @@ pub use self::AnnNode::*; use rustc_target::spec::abi::Abi; use syntax::ast; -use syntax::codemap::{CodeMap, Spanned}; +use syntax::codemap::CodeMap; use syntax::parse::ParseSess; use syntax::parse::lexer::comments; use syntax::print::pp::{self, Breaks}; @@ -933,7 +933,7 @@ impl<'a> State<'a> { m: &hir::MethodSig, generics: &hir::Generics, vis: &hir::Visibility, - arg_names: &[Spanned<ast::Name>], + arg_names: &[ast::Ident], body_id: Option<hir::BodyId>) -> io::Result<()> { self.print_fn(&m.decl, @@ -1380,7 +1380,7 @@ impl<'a> State<'a> { } hir::ExprWhile(ref test, ref blk, opt_label) => { if let Some(label) = opt_label { - self.print_name(label.name)?; + self.print_ident(label.ident)?; self.word_space(":")?; } self.head("while")?; @@ -1390,7 +1390,7 @@ impl<'a> State<'a> { } hir::ExprLoop(ref blk, opt_label, _) => { if let Some(label) = opt_label { - self.print_name(label.name)?; + self.print_ident(label.ident)?; self.word_space(":")?; } self.head("loop")?; @@ -1426,7 +1426,7 @@ impl<'a> State<'a> { } hir::ExprBlock(ref blk, opt_label) => { if let Some(label) = opt_label { - self.print_name(label.name)?; + self.print_ident(label.ident)?; self.word_space(":")?; } // containing cbox, will be closed by print-block at } @@ -1468,7 +1468,7 @@ impl<'a> State<'a> { self.s.word("break")?; self.s.space()?; if let Some(label) = destination.label { - self.print_name(label.name)?; + self.print_ident(label.ident)?; self.s.space()?; } if let Some(ref expr) = *opt_expr { @@ -1480,7 +1480,7 @@ impl<'a> State<'a> { self.s.word("continue")?; self.s.space()?; if let Some(label) = destination.label { - self.print_name(label.name)?; + self.print_ident(label.ident)?; self.s.space()? } } @@ -1784,7 +1784,7 @@ impl<'a> State<'a> { // is that it doesn't matter match pat.node { PatKind::Wild => self.s.word("_")?, - PatKind::Binding(binding_mode, _, ref path1, ref sub) => { + PatKind::Binding(binding_mode, _, ident, ref sub) => { match binding_mode { hir::BindingAnnotation::Ref => { self.word_nbsp("ref")?; @@ -1799,7 +1799,7 @@ impl<'a> State<'a> { self.word_nbsp("mut")?; } } - self.print_name(path1.node)?; + self.print_ident(ident)?; if let Some(ref p) = *sub { self.s.word("@")?; self.print_pat(&p)?; @@ -1964,7 +1964,7 @@ impl<'a> State<'a> { match arm.body.node { hir::ExprBlock(ref blk, opt_label) => { if let Some(label) = opt_label { - self.print_name(label.name)?; + self.print_ident(label.ident)?; self.word_space(":")?; } // the block will close the pattern's ibox @@ -1990,7 +1990,7 @@ impl<'a> State<'a> { name: Option<ast::Name>, generics: &hir::Generics, vis: &hir::Visibility, - arg_names: &[Spanned<ast::Name>], + arg_names: &[ast::Ident], body_id: Option<hir::BodyId>) -> io::Result<()> { self.print_fn_header_info(header, vis)?; @@ -2007,8 +2007,8 @@ impl<'a> State<'a> { assert!(arg_names.is_empty() || body_id.is_none()); self.commasep(Inconsistent, &decl.inputs, |s, ty| { s.ibox(indent_unit)?; - if let Some(name) = arg_names.get(i) { - s.s.word(&name.node.as_str())?; + if let Some(arg_name) = arg_names.get(i) { + s.s.word(&arg_name.as_str())?; s.s.word(":")?; s.s.space()?; } else if let Some(body_id) = body_id { @@ -2242,7 +2242,7 @@ impl<'a> State<'a> { decl: &hir::FnDecl, name: Option<ast::Name>, generic_params: &[hir::GenericParam], - arg_names: &[Spanned<ast::Name>]) + arg_names: &[ast::Ident]) -> io::Result<()> { self.ibox(indent_unit)?; if !generic_params.is_empty() { diff --git a/src/librustc/ich/impls_hir.rs b/src/librustc/ich/impls_hir.rs index feff4a5c271..94fda3e2874 100644 --- a/src/librustc/ich/impls_hir.rs +++ b/src/librustc/ich/impls_hir.rs @@ -155,8 +155,7 @@ impl_stable_hash_for!(enum hir::LifetimeName { }); impl_stable_hash_for!(struct hir::Label { - span, - name + ident }); impl_stable_hash_for!(struct hir::Lifetime { @@ -201,7 +200,6 @@ impl_stable_hash_for!(enum hir::TraitBoundModifier { impl_stable_hash_for!(struct hir::GenericParam { id, name, - span, pure_wrt_drop, attrs, bounds, diff --git a/src/librustc/infer/error_reporting/need_type_info.rs b/src/librustc/infer/error_reporting/need_type_info.rs index 7352c14490d..773de8912ce 100644 --- a/src/librustc/infer/error_reporting/need_type_info.rs +++ b/src/librustc/infer/error_reporting/need_type_info.rs @@ -131,8 +131,8 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> { labels.clear(); labels.push((pattern.span, format!("consider giving this closure parameter a type"))); } else if let Some(pattern) = local_visitor.found_local_pattern { - if let Some(simple_name) = pattern.simple_name() { - labels.push((pattern.span, format!("consider giving `{}` a type", simple_name))); + if let Some(simple_ident) = pattern.simple_ident() { + labels.push((pattern.span, format!("consider giving `{}` a type", simple_ident))); } else { labels.push((pattern.span, format!("consider giving the pattern a type"))); } diff --git a/src/librustc/infer/error_reporting/nice_region_error/different_lifetimes.rs b/src/librustc/infer/error_reporting/nice_region_error/different_lifetimes.rs index 7b0f2933580..a2b89475210 100644 --- a/src/librustc/infer/error_reporting/nice_region_error/different_lifetimes.rs +++ b/src/librustc/infer/error_reporting/nice_region_error/different_lifetimes.rs @@ -96,14 +96,14 @@ impl<'a, 'gcx, 'tcx> NiceRegionError<'a, 'gcx, 'tcx> { let sub_is_ret_type = self.is_return_type_anon(scope_def_id_sub, bregion_sub, ty_fndecl_sub); - let span_label_var1 = if let Some(simple_name) = anon_arg_sup.pat.simple_name() { - format!(" from `{}`", simple_name) + let span_label_var1 = if let Some(simple_ident) = anon_arg_sup.pat.simple_ident() { + format!(" from `{}`", simple_ident) } else { format!("") }; - let span_label_var2 = if let Some(simple_name) = anon_arg_sub.pat.simple_name() { - format!(" into `{}`", simple_name) + let span_label_var2 = if let Some(simple_ident) = anon_arg_sub.pat.simple_ident() { + format!(" into `{}`", simple_ident) } else { format!("") }; diff --git a/src/librustc/infer/error_reporting/nice_region_error/named_anon_conflict.rs b/src/librustc/infer/error_reporting/nice_region_error/named_anon_conflict.rs index c106fd0c3d2..51abfa2505a 100644 --- a/src/librustc/infer/error_reporting/nice_region_error/named_anon_conflict.rs +++ b/src/librustc/infer/error_reporting/nice_region_error/named_anon_conflict.rs @@ -95,10 +95,10 @@ impl<'a, 'gcx, 'tcx> NiceRegionError<'a, 'gcx, 'tcx> { } } - let (error_var, span_label_var) = if let Some(simple_name) = arg.pat.simple_name() { + let (error_var, span_label_var) = if let Some(simple_ident) = arg.pat.simple_ident() { ( - format!("the type of `{}`", simple_name), - format!("the type of `{}`", simple_name), + format!("the type of `{}`", simple_ident), + format!("the type of `{}`", simple_ident), ) } else { ("parameter type".to_owned(), "type".to_owned()) diff --git a/src/librustc/middle/liveness.rs b/src/librustc/middle/liveness.rs index b98a4416d21..07a9dd75d4c 100644 --- a/src/librustc/middle/liveness.rs +++ b/src/librustc/middle/liveness.rs @@ -374,10 +374,9 @@ fn visit_fn<'a, 'tcx: 'a>(ir: &mut IrMaps<'a, 'tcx>, let body = ir.tcx.hir.body(body_id); for arg in &body.arguments { - arg.pat.each_binding(|_bm, hir_id, _x, path1| { + arg.pat.each_binding(|_bm, hir_id, _x, ident| { debug!("adding argument {:?}", hir_id); - let name = path1.node; - fn_maps.add_variable(Arg(hir_id, name)); + fn_maps.add_variable(Arg(hir_id, ident.name)); }) }; @@ -430,12 +429,11 @@ fn add_from_pat<'a, 'tcx>(ir: &mut IrMaps<'a, 'tcx>, pat: &P<hir::Pat>) { } } - pat.each_binding(|_bm, hir_id, _sp, path1| { - let name = path1.node; - ir.add_live_node_for_node(hir_id, VarDefNode(path1.span)); + pat.each_binding(|_bm, hir_id, _sp, ident| { + ir.add_live_node_for_node(hir_id, VarDefNode(ident.span)); ir.add_variable(Local(LocalInfo { id: hir_id, - name, + name: ident.name, is_shorthand: shorthand_field_ids.contains(&hir_id) })); }); @@ -1374,7 +1372,7 @@ fn check_local<'a, 'tcx>(this: &mut Liveness<'a, 'tcx>, local: &'tcx hir::Local) }, None => { this.pat_bindings(&local.pat, |this, ln, var, sp, id| { - let span = local.pat.simple_span().unwrap_or(sp); + let span = local.pat.simple_ident().map_or(sp, |ident| ident.span); this.warn_about_unused(span, id, ln, var); }) } @@ -1475,12 +1473,11 @@ impl<'a, 'tcx> Liveness<'a, 'tcx> { fn warn_about_unused_args(&self, body: &hir::Body, entry_ln: LiveNode) { for arg in &body.arguments { - arg.pat.each_binding(|_bm, hir_id, _, path1| { - let sp = path1.span; + arg.pat.each_binding(|_bm, hir_id, _, ident| { + let sp = ident.span; let var = self.variable(hir_id, sp); // Ignore unused self. - let name = path1.node; - if name != keywords::SelfValue.name() { + if ident.name != keywords::SelfValue.name() { if !self.warn_about_unused(sp, hir_id, entry_ln, var) { if self.live_on_entry(entry_ln, var).is_none() { self.report_dead_assign(hir_id, sp, var, true); diff --git a/src/librustc/middle/resolve_lifetime.rs b/src/librustc/middle/resolve_lifetime.rs index 1d9345dbae2..5d5ada7b91e 100644 --- a/src/librustc/middle/resolve_lifetime.rs +++ b/src/librustc/middle/resolve_lifetime.rs @@ -254,7 +254,7 @@ struct LifetimeContext<'a, 'tcx: 'a> { is_in_fn_syntax: bool, /// List of labels in the function/method currently under analysis. - labels_in_fn: Vec<(ast::Name, Span)>, + labels_in_fn: Vec<ast::Ident>, /// Cache for cross-crate per-definition object lifetime defaults. xcrate_object_lifetime_defaults: DefIdMap<Vec<ObjectLifetimeDefault>>, @@ -1109,7 +1109,7 @@ fn extract_labels(ctxt: &mut LifetimeContext<'_, '_>, body: &hir::Body) { struct GatherLabels<'a, 'tcx: 'a> { tcx: TyCtxt<'a, 'tcx, 'tcx>, scope: ScopeRef<'a>, - labels_in_fn: &'a mut Vec<(ast::Name, Span)>, + labels_in_fn: &'a mut Vec<ast::Ident>, } let mut gather = GatherLabels { @@ -1125,32 +1125,31 @@ fn extract_labels(ctxt: &mut LifetimeContext<'_, '_>, body: &hir::Body) { } fn visit_expr(&mut self, ex: &hir::Expr) { - if let Some((label, label_span)) = expression_label(ex) { - for &(prior, prior_span) in &self.labels_in_fn[..] { + if let Some(label) = expression_label(ex) { + for prior_label in &self.labels_in_fn[..] { // FIXME (#24278): non-hygienic comparison - if label == prior { + if label.name == prior_label.name { signal_shadowing_problem( self.tcx, - label, - original_label(prior_span), - shadower_label(label_span), + label.name, + original_label(prior_label.span), + shadower_label(label.span), ); } } - check_if_label_shadows_lifetime(self.tcx, self.scope, label, label_span); + check_if_label_shadows_lifetime(self.tcx, self.scope, label); - self.labels_in_fn.push((label, label_span)); + self.labels_in_fn.push(label); } intravisit::walk_expr(self, ex) } } - fn expression_label(ex: &hir::Expr) -> Option<(ast::Name, Span)> { + fn expression_label(ex: &hir::Expr) -> Option<ast::Ident> { match ex.node { - hir::ExprWhile(.., Some(label)) | hir::ExprLoop(_, Some(label), _) => { - Some((label.name, label.span)) - } + hir::ExprWhile(.., Some(label)) | + hir::ExprLoop(_, Some(label), _) => Some(label.ident), _ => None, } } @@ -1158,8 +1157,7 @@ fn extract_labels(ctxt: &mut LifetimeContext<'_, '_>, body: &hir::Body) { fn check_if_label_shadows_lifetime( tcx: TyCtxt<'_, '_, '_>, mut scope: ScopeRef<'_>, - label: ast::Name, - label_span: Span, + label: ast::Ident, ) { loop { match *scope { @@ -1177,15 +1175,14 @@ fn extract_labels(ctxt: &mut LifetimeContext<'_, '_>, body: &hir::Body) { ref lifetimes, s, .. } => { // FIXME (#24278): non-hygienic comparison - let param_name = hir::ParamName::Plain(ast::Ident::with_empty_ctxt(label)); - if let Some(def) = lifetimes.get(¶m_name) { + if let Some(def) = lifetimes.get(&hir::LifetimeName::Ident(label.modern())) { let node_id = tcx.hir.as_local_node_id(def.id().unwrap()).unwrap(); signal_shadowing_problem( tcx, - label, + label.name, original_lifetime(tcx.hir.span(node_id)), - shadower_label(label_span), + shadower_label(label.span), ); return; } @@ -2325,13 +2322,13 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> { mut old_scope: ScopeRef, param: &'tcx hir::GenericParam, ) { - for &(label, label_span) in &self.labels_in_fn { + for label in &self.labels_in_fn { // FIXME (#24278): non-hygienic comparison - if param.name.ident().name == label { + if param.name.ident().name == label.name { signal_shadowing_problem( self.tcx, - label, - original_label(label_span), + label.name, + original_label(label.span), shadower_lifetime(¶m), ); return; diff --git a/src/librustc_borrowck/borrowck/gather_loans/gather_moves.rs b/src/librustc_borrowck/borrowck/gather_loans/gather_moves.rs index fa9bb57275a..241950fb6bf 100644 --- a/src/librustc_borrowck/borrowck/gather_loans/gather_moves.rs +++ b/src/librustc_borrowck/borrowck/gather_loans/gather_moves.rs @@ -109,10 +109,10 @@ pub fn gather_move_from_pat<'a, 'c, 'tcx: 'c>(bccx: &BorrowckCtxt<'a, 'tcx>, cmt: &'c mc::cmt_<'tcx>) { let source = get_pattern_source(bccx.tcx,move_pat); let pat_span_path_opt = match move_pat.node { - PatKind::Binding(_, _, ref path1, _) => { + PatKind::Binding(_, _, ident, _) => { Some(MovePlace { span: move_pat.span, - name: path1.node, + name: ident.name, pat_source: source, }) } diff --git a/src/librustc_borrowck/borrowck/unused.rs b/src/librustc_borrowck/borrowck/unused.rs index b2b4c7d777e..294ae1e63a9 100644 --- a/src/librustc_borrowck/borrowck/unused.rs +++ b/src/librustc_borrowck/borrowck/unused.rs @@ -46,11 +46,9 @@ impl<'a, 'tcx> UnusedMutCx<'a, 'tcx> { let tcx = self.bccx.tcx; let mut mutables = FxHashMap(); for p in pats { - p.each_binding(|_, hir_id, span, path1| { - let name = path1.node; - + p.each_binding(|_, hir_id, span, ident| { // Skip anything that looks like `_foo` - if name.as_str().starts_with("_") { + if ident.as_str().starts_with("_") { return; } @@ -65,7 +63,7 @@ impl<'a, 'tcx> UnusedMutCx<'a, 'tcx> { _ => return, } - mutables.entry(name).or_insert(Vec::new()).push((hir_id, span)); + mutables.entry(ident.name).or_insert(Vec::new()).push((hir_id, span)); }); } diff --git a/src/librustc_lint/bad_style.rs b/src/librustc_lint/bad_style.rs index 70defbb0215..af34530a548 100644 --- a/src/librustc_lint/bad_style.rs +++ b/src/librustc_lint/bad_style.rs @@ -151,7 +151,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for NonCamelCaseTypes { GenericParamKind::Lifetime { .. } => {} GenericParamKind::Type { synthetic, .. } => { if synthetic.is_none() { - self.check_case(cx, "type parameter", param.name.name(), param.span); + self.check_case(cx, "type parameter", param.name.ident().name, param.span); } } } @@ -302,20 +302,20 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for NonSnakeCase { } fn check_trait_item(&mut self, cx: &LateContext, item: &hir::TraitItem) { - if let hir::TraitItemKind::Method(_, hir::TraitMethod::Required(ref names)) = item.node { + if let hir::TraitItemKind::Method(_, hir::TraitMethod::Required(ref pnames)) = item.node { self.check_snake_case(cx, "trait method", &item.name.as_str(), Some(item.span)); - for name in names { - self.check_snake_case(cx, "variable", &name.node.as_str(), Some(name.span)); + for param_name in pnames { + self.check_snake_case(cx, "variable", ¶m_name.as_str(), Some(param_name.span)); } } } fn check_pat(&mut self, cx: &LateContext, p: &hir::Pat) { - if let &PatKind::Binding(_, _, ref path1, _) = &p.node { - self.check_snake_case(cx, "variable", &path1.node.as_str(), Some(p.span)); + if let &PatKind::Binding(_, _, ref ident, _) = &p.node { + self.check_snake_case(cx, "variable", &ident.as_str(), Some(p.span)); } } diff --git a/src/librustc_lint/builtin.rs b/src/librustc_lint/builtin.rs index dfbfcfccf7c..aa952c5330e 100644 --- a/src/librustc_lint/builtin.rs +++ b/src/librustc_lint/builtin.rs @@ -182,18 +182,14 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for NonShorthandFieldPatterns { // (Issue #49588) continue; } - if let PatKind::Binding(_, _, name, None) = fieldpat.node.pat.node { - let binding_ident = ast::Ident::new(name.node, name.span); - if cx.tcx.find_field_index(binding_ident, &variant) == + if let PatKind::Binding(_, _, ident, None) = fieldpat.node.pat.node { + if cx.tcx.find_field_index(ident, &variant) == Some(cx.tcx.field_index(fieldpat.node.id, cx.tables)) { let mut err = cx.struct_span_lint(NON_SHORTHAND_FIELD_PATTERNS, fieldpat.span, - &format!("the `{}:` in this pattern is redundant", - name.node)); + &format!("the `{}:` in this pattern is redundant", ident)); let subspan = cx.tcx.sess.codemap().span_through_char(fieldpat.span, ':'); - err.span_suggestion_short(subspan, - "remove this", - format!("{}", name.node)); + err.span_suggestion_short(subspan, "remove this", format!("{}", ident)); err.emit(); } } diff --git a/src/librustc_metadata/encoder.rs b/src/librustc_metadata/encoder.rs index 46c4a3a1abe..d8a224d3bad 100644 --- a/src/librustc_metadata/encoder.rs +++ b/src/librustc_metadata/encoder.rs @@ -39,9 +39,8 @@ use std::path::Path; use rustc_data_structures::sync::Lrc; use std::u32; use syntax::ast::{self, CRATE_NODE_ID}; -use syntax::codemap::Spanned; use syntax::attr; -use syntax::symbol::Symbol; +use syntax::symbol::keywords; use syntax_pos::{self, hygiene, FileName, FileMap, Span, DUMMY_SP}; use rustc::hir::{self, PatKind}; @@ -975,16 +974,15 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> { let body = self.tcx.hir.body(body_id); self.lazy_seq(body.arguments.iter().map(|arg| { match arg.pat.node { - PatKind::Binding(_, _, name, _) => name.node, - _ => Symbol::intern("") + PatKind::Binding(_, _, ident, _) => ident.name, + _ => keywords::Invalid.name(), } })) }) } - fn encode_fn_arg_names(&mut self, names: &[Spanned<ast::Name>]) - -> LazySeq<ast::Name> { - self.lazy_seq(names.iter().map(|name| name.node)) + fn encode_fn_arg_names(&mut self, param_names: &[ast::Ident]) -> LazySeq<ast::Name> { + self.lazy_seq(param_names.iter().map(|ident| ident.name)) } fn encode_optimized_mir(&mut self, def_id: DefId) -> Option<Lazy<mir::Mir<'tcx>>> { diff --git a/src/librustc_mir/build/mod.rs b/src/librustc_mir/build/mod.rs index 85671414618..ab20b7bfea2 100644 --- a/src/librustc_mir/build/mod.rs +++ b/src/librustc_mir/build/mod.rs @@ -538,8 +538,8 @@ fn construct_fn<'a, 'gcx, 'tcx, A>(hir: Cx<'a, 'gcx, 'tcx>, mutability: Mutability::Not, }; if let Some(hir::map::NodeBinding(pat)) = tcx.hir.find(var_id) { - if let hir::PatKind::Binding(_, _, ref name, _) = pat.node { - decl.debug_name = name.node; + if let hir::PatKind::Binding(_, _, ident, _) = pat.node { + decl.debug_name = ident.name; let bm = *hir.tables.pat_binding_modes() .get(pat.hir_id) @@ -675,8 +675,8 @@ impl<'a, 'gcx, 'tcx> Builder<'a, 'gcx, 'tcx> { // If this is a simple binding pattern, give the local a nice name for debuginfo. let mut name = None; if let Some(pat) = pattern { - if let hir::PatKind::Binding(_, _, ref ident, _) = pat.node { - name = Some(ident.node); + if let hir::PatKind::Binding(_, _, ident, _) = pat.node { + name = Some(ident.name); } } diff --git a/src/librustc_mir/hair/pattern/check_match.rs b/src/librustc_mir/hair/pattern/check_match.rs index 24301e970f5..0f4052b6fc8 100644 --- a/src/librustc_mir/hair/pattern/check_match.rs +++ b/src/librustc_mir/hair/pattern/check_match.rs @@ -308,7 +308,7 @@ impl<'a, 'tcx> MatchVisitor<'a, 'tcx> { fn check_for_bindings_named_the_same_as_variants(cx: &MatchVisitor, pat: &Pat) { pat.walk(|p| { - if let PatKind::Binding(_, _, name, None) = p.node { + if let PatKind::Binding(_, _, ident, None) = p.node { let bm = *cx.tables .pat_binding_modes() .get(p.hir_id) @@ -321,13 +321,13 @@ fn check_for_bindings_named_the_same_as_variants(cx: &MatchVisitor, pat: &Pat) { let pat_ty = cx.tables.pat_ty(p); if let ty::TyAdt(edef, _) = pat_ty.sty { if edef.is_enum() && edef.variants.iter().any(|variant| { - variant.name == name.node && variant.ctor_kind == CtorKind::Const + variant.name == ident.name && variant.ctor_kind == CtorKind::Const }) { let ty_path = cx.tcx.item_path_str(edef.did); let mut err = struct_span_warn!(cx.tcx.sess, p.span, E0170, "pattern binding `{}` is named the same as one \ of the variants of the type `{}`", - name.node, ty_path); + ident, ty_path); err.span_suggestion_with_applicability( p.span, "to match on the variant, qualify the path", diff --git a/src/librustc_mir/hair/pattern/mod.rs b/src/librustc_mir/hair/pattern/mod.rs index 9b92a8b5e78..3f3e29a808a 100644 --- a/src/librustc_mir/hair/pattern/mod.rs +++ b/src/librustc_mir/hair/pattern/mod.rs @@ -461,7 +461,7 @@ impl<'a, 'tcx> PatternContext<'a, 'tcx> { } } - PatKind::Binding(_, id, ref name, ref sub) => { + PatKind::Binding(_, id, ident, ref sub) => { let var_ty = self.tables.node_id_to_type(pat.hir_id); let region = match var_ty.sty { ty::TyRef(r, _, _) => Some(r), @@ -491,14 +491,14 @@ impl<'a, 'tcx> PatternContext<'a, 'tcx> { if let ty::TyRef(_, rty, _) = ty.sty { ty = rty; } else { - bug!("`ref {}` has wrong type {}", name.node, ty); + bug!("`ref {}` has wrong type {}", ident, ty); } } PatternKind::Binding { mutability, mode, - name: name.node, + name: ident.name, var: id, ty: var_ty, subpattern: self.lower_opt_pattern(sub), diff --git a/src/librustc_typeck/check/mod.rs b/src/librustc_typeck/check/mod.rs index 0b590e1110f..1c107e1cdca 100644 --- a/src/librustc_typeck/check/mod.rs +++ b/src/librustc_typeck/check/mod.rs @@ -960,14 +960,14 @@ impl<'a, 'gcx, 'tcx> Visitor<'gcx> for GatherLocalsVisitor<'a, 'gcx, 'tcx> { // Add pattern bindings. fn visit_pat(&mut self, p: &'gcx hir::Pat) { - if let PatKind::Binding(_, _, ref path1, _) = p.node { + if let PatKind::Binding(_, _, ident, _) = p.node { let var_ty = self.assign(p.span, p.id, None); self.fcx.require_type_is_sized(var_ty, p.span, traits::VariableType(p.id)); debug!("Pattern binding {} is assigned to {} with type {:?}", - path1.node, + ident, self.fcx.ty_to_string( self.fcx.locals.borrow().get(&p.id).unwrap().clone()), var_ty); @@ -1050,7 +1050,7 @@ fn check_fn<'a, 'gcx, 'tcx>(inherited: &'a Inherited<'a, 'gcx, 'tcx>, // The check for a non-trivial pattern is a hack to avoid duplicate warnings // for simple cases like `fn foo(x: Trait)`, // where we would error once on the parameter as a whole, and once on the binding `x`. - if arg.pat.simple_name().is_none() { + if arg.pat.simple_ident().is_none() { fcx.require_type_is_sized(arg_ty, decl.output.span(), traits::MiscObligation); } diff --git a/src/librustc_typeck/collect.rs b/src/librustc_typeck/collect.rs index 28dba08f16a..852603ac51c 100644 --- a/src/librustc_typeck/collect.rs +++ b/src/librustc_typeck/collect.rs @@ -914,7 +914,7 @@ fn generics_of<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, let mut i = 0; params.extend(ast_generics.params.iter().filter_map(|param| match param.kind { GenericParamKind::Type { ref default, synthetic, .. } => { - if param.name.name() == keywords::SelfType.name() { + if param.name.ident().name == keywords::SelfType.name() { span_bug!(param.span, "`Self` should not be the name of a regular parameter"); } @@ -931,7 +931,7 @@ fn generics_of<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, let ty_param = ty::GenericParamDef { index: type_start + i as u32, - name: param.name.name().as_interned_str(), + name: param.name.ident().as_interned_str(), def_id: tcx.hir.local_def_id(param.id), pure_wrt_drop: param.pure_wrt_drop, kind: ty::GenericParamDefKind::Type { @@ -1461,7 +1461,7 @@ pub fn explicit_predicates_of<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, for param in &ast_generics.params { match param.kind { GenericParamKind::Type { .. } => { - let name = param.name.name().as_interned_str(); + let name = param.name.ident().as_interned_str(); let param_ty = ty::ParamTy::new(index, name).to_ty(tcx); index += 1; diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index 664a603920c..f63084b3f19 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -2150,11 +2150,11 @@ pub struct Arguments { pub values: Vec<Argument>, } -impl<'a> Clean<Arguments> for (&'a [hir::Ty], &'a [Spanned<ast::Name>]) { +impl<'a> Clean<Arguments> for (&'a [hir::Ty], &'a [ast::Ident]) { fn clean(&self, cx: &DocContext) -> Arguments { Arguments { values: self.0.iter().enumerate().map(|(i, ty)| { - let mut name = self.1.get(i).map(|n| n.node.to_string()) + let mut name = self.1.get(i).map(|ident| ident.to_string()) .unwrap_or(String::new()); if name.is_empty() { name = "_".to_string(); @@ -4064,7 +4064,7 @@ fn name_from_pat(p: &hir::Pat) -> String { match p.node { PatKind::Wild => "_".to_string(), - PatKind::Binding(_, _, ref p, _) => p.node.to_string(), + PatKind::Binding(_, _, ident, _) => ident.to_string(), PatKind::TupleStruct(ref p, ..) | PatKind::Path(ref p) => qpath_to_string(p), PatKind::Struct(ref name, ref fields, etc) => { format!("{} {{ {}{} }}", qpath_to_string(name), diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 21bd6c08324..faf2cf64e1d 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -7325,7 +7325,7 @@ impl<'a> Parser<'a> { match self.token { token::Ident(ident, false) if ident.name == keywords::Underscore.name() => { self.bump(); // `_` - Ok(Some(Ident::new(ident.name.gensymed(), ident.span))) + Ok(Some(ident.gensym())) } _ => self.parse_ident().map(Some), } |
