]> git.lizzy.rs Git - rust.git/commitdiff
Represent lifetimes as Names instead of Idents
authorEdward Wang <edward.yu.wang@gmail.com>
Fri, 21 Feb 2014 20:04:03 +0000 (04:04 +0800)
committerEdward Wang <edward.yu.wang@gmail.com>
Fri, 21 Feb 2014 20:05:33 +0000 (04:05 +0800)
Closes #7743.

14 files changed:
src/librustc/metadata/decoder.rs
src/librustc/metadata/encoder.rs
src/librustc/metadata/tydecode.rs
src/librustc/metadata/tyencode.rs
src/librustc/middle/resolve_lifetime.rs
src/librustc/middle/ty.rs
src/librustc/util/ppaux.rs
src/librustdoc/clean.rs
src/libsyntax/ast.rs
src/libsyntax/ext/build.rs
src/libsyntax/ext/deriving/ty.rs
src/libsyntax/ext/format.rs
src/libsyntax/parse/parser.rs
src/libsyntax/print/pprust.rs

index 47fcc4534897cdc76f29cc7bfd76174bfdc67836..e45d7ad31a4106c526c8413cc8ffadfa4709092c 100644 (file)
@@ -270,7 +270,7 @@ fn item_region_param_defs(item_doc: ebml::Doc, cdata: Cmd)
                                              tag_region_param_def_def_id);
             let def_id = reader::with_doc_data(def_id_doc, parse_def_id);
             let def_id = translate_def_id(cdata, def_id);
-            v.push(ty::RegionParameterDef { ident: ident,
+            v.push(ty::RegionParameterDef { ident: ident.name,
                                             def_id: def_id });
             true
         });
index d2b843cdcf7e9058799e8e9b12f3c70c59663ea1..ee65f7ddf499b2937f68ce714a111859f6c820f8 100644 (file)
@@ -111,8 +111,8 @@ pub fn reachable(ecx: &EncodeContext, id: NodeId) -> bool {
     reachable.get().contains(&id)
 }
 
-fn encode_name(ebml_w: &mut writer::Encoder, name: Ident) {
-    ebml_w.wr_tagged_str(tag_paths_data_name, token::get_ident(name).get());
+fn encode_name(ebml_w: &mut writer::Encoder, name: Name) {
+    ebml_w.wr_tagged_str(tag_paths_data_name, token::get_name(name).get());
 }
 
 fn encode_impl_type_basename(ebml_w: &mut writer::Encoder, name: Ident) {
@@ -312,7 +312,7 @@ fn encode_struct_fields(ebml_w: &mut writer::Encoder,
             NamedField(ident, vis) => {
                ebml_w.start_tag(tag_item_field);
                encode_struct_field_family(ebml_w, vis);
-               encode_name(ebml_w, ident);
+               encode_name(ebml_w, ident.name);
                encode_def_id(ebml_w, local_def(f.node.id));
                ebml_w.end_tag();
             }
@@ -352,7 +352,7 @@ fn encode_enum_variant_info(ecx: &EncodeContext,
             ast::TupleVariantKind(_) => encode_family(ebml_w, 'v'),
             ast::StructVariantKind(_) => encode_family(ebml_w, 'V')
         }
-        encode_name(ebml_w, variant.node.name);
+        encode_name(ebml_w, variant.node.name.name);
         encode_parent_item(ebml_w, local_def(id));
         encode_visibility(ebml_w, variant.node.vis);
         encode_attributes(ebml_w, variant.node.attrs);
@@ -579,7 +579,7 @@ fn encode_info_for_mod(ecx: &EncodeContext,
     ebml_w.start_tag(tag_items_data_item);
     encode_def_id(ebml_w, local_def(id));
     encode_family(ebml_w, 'm');
-    encode_name(ebml_w, name);
+    encode_name(ebml_w, name.name);
     debug!("(encoding info for module) encoding info for module ID {}", id);
 
     // Encode info about all the module children.
@@ -716,7 +716,7 @@ fn encode_info_for_struct(ecx: &EncodeContext,
         debug!("encode_info_for_struct: doing {} {}",
                token::get_ident(nm), id);
         encode_struct_field_family(ebml_w, vis);
-        encode_name(ebml_w, nm);
+        encode_name(ebml_w, nm.name);
         encode_type(ecx, ebml_w, node_id_to_type(tcx, id));
         encode_def_id(ebml_w, local_def(id));
         ebml_w.end_tag();
@@ -743,7 +743,7 @@ fn encode_info_for_struct_ctor(ecx: &EncodeContext,
     encode_family(ebml_w, 'f');
     encode_bounds_and_type(ebml_w, ecx,
                            &lookup_item_type(ecx.tcx, local_def(ctor_id)));
-    encode_name(ebml_w, name);
+    encode_name(ebml_w, name.name);
     encode_type(ecx, ebml_w, node_id_to_type(ecx.tcx, ctor_id));
     ecx.tcx.map.with_path(ctor_id, |path| encode_path(ebml_w, path));
     encode_parent_item(ebml_w, local_def(struct_id));
@@ -766,7 +766,7 @@ fn encode_method_ty_fields(ecx: &EncodeContext,
                            ebml_w: &mut writer::Encoder,
                            method_ty: &ty::Method) {
     encode_def_id(ebml_w, method_ty.def_id);
-    encode_name(ebml_w, method_ty.ident);
+    encode_name(ebml_w, method_ty.ident.name);
     encode_ty_type_param_defs(ebml_w, ecx,
                               method_ty.generics.type_param_defs(),
                               tag_item_method_tps);
@@ -916,7 +916,7 @@ fn add_to_index(item: &Item, ebml_w: &writer::Encoder,
         }
         encode_type(ecx, ebml_w, node_id_to_type(tcx, item.id));
         encode_symbol(ecx, ebml_w, item.id);
-        encode_name(ebml_w, item.ident);
+        encode_name(ebml_w, item.ident.name);
         encode_path(ebml_w, path);
 
         let inlineable = !ecx.non_inlineable_statics.borrow().get().contains(&item.id);
@@ -934,7 +934,7 @@ fn add_to_index(item: &Item, ebml_w: &writer::Encoder,
         encode_family(ebml_w, purity_fn_family(purity));
         let tps_len = generics.ty_params.len();
         encode_bounds_and_type(ebml_w, ecx, &lookup_item_type(tcx, def_id));
-        encode_name(ebml_w, item.ident);
+        encode_name(ebml_w, item.ident.name);
         encode_path(ebml_w, path);
         encode_attributes(ebml_w, item.attrs);
         if tps_len > 0u || should_inline(item.attrs) {
@@ -960,7 +960,7 @@ fn add_to_index(item: &Item, ebml_w: &writer::Encoder,
         ebml_w.start_tag(tag_items_data_item);
         encode_def_id(ebml_w, def_id);
         encode_family(ebml_w, 'n');
-        encode_name(ebml_w, item.ident);
+        encode_name(ebml_w, item.ident.name);
         encode_path(ebml_w, path);
 
         // Encode all the items in this module.
@@ -978,7 +978,7 @@ fn add_to_index(item: &Item, ebml_w: &writer::Encoder,
         encode_def_id(ebml_w, def_id);
         encode_family(ebml_w, 'y');
         encode_bounds_and_type(ebml_w, ecx, &lookup_item_type(tcx, def_id));
-        encode_name(ebml_w, item.ident);
+        encode_name(ebml_w, item.ident.name);
         encode_path(ebml_w, path);
         encode_visibility(ebml_w, vis);
         ebml_w.end_tag();
@@ -991,7 +991,7 @@ fn add_to_index(item: &Item, ebml_w: &writer::Encoder,
         encode_family(ebml_w, 't');
         encode_item_variances(ebml_w, ecx, item.id);
         encode_bounds_and_type(ebml_w, ecx, &lookup_item_type(tcx, def_id));
-        encode_name(ebml_w, item.ident);
+        encode_name(ebml_w, item.ident.name);
         encode_attributes(ebml_w, item.attrs);
         for v in (*enum_definition).variants.iter() {
             encode_variant_id(ebml_w, local_def(v.node.id));
@@ -1030,7 +1030,7 @@ fn add_to_index(item: &Item, ebml_w: &writer::Encoder,
         encode_bounds_and_type(ebml_w, ecx, &lookup_item_type(tcx, def_id));
 
         encode_item_variances(ebml_w, ecx, item.id);
-        encode_name(ebml_w, item.ident);
+        encode_name(ebml_w, item.ident.name);
         encode_attributes(ebml_w, item.attrs);
         encode_path(ebml_w, path.clone());
         encode_visibility(ebml_w, vis);
@@ -1070,7 +1070,7 @@ fn add_to_index(item: &Item, ebml_w: &writer::Encoder,
         encode_def_id(ebml_w, def_id);
         encode_family(ebml_w, 'i');
         encode_bounds_and_type(ebml_w, ecx, &lookup_item_type(tcx, def_id));
-        encode_name(ebml_w, item.ident);
+        encode_name(ebml_w, item.ident.name);
         encode_attributes(ebml_w, item.attrs);
         match ty.node {
             ast::TyPath(ref path, ref bounds, _) if path.segments
@@ -1134,7 +1134,7 @@ fn add_to_index(item: &Item, ebml_w: &writer::Encoder,
                                   tag_items_data_item_ty_param_bounds);
         encode_region_param_defs(ebml_w, trait_def.generics.region_param_defs());
         encode_trait_ref(ebml_w, ecx, trait_def.trait_ref, tag_item_trait_ref);
-        encode_name(ebml_w, item.ident);
+        encode_name(ebml_w, item.ident.name);
         encode_attributes(ebml_w, item.attrs);
         encode_visibility(ebml_w, vis);
         for &method_def_id in ty::trait_method_def_ids(tcx, def_id).iter() {
@@ -1255,7 +1255,7 @@ fn encode_info_for_foreign_item(ecx: &EncodeContext,
         encode_family(ebml_w, purity_fn_family(ImpureFn));
         encode_bounds_and_type(ebml_w, ecx,
                                &lookup_item_type(ecx.tcx,local_def(nitem.id)));
-        encode_name(ebml_w, nitem.ident);
+        encode_name(ebml_w, nitem.ident.name);
         if abi.is_intrinsic() {
             (ecx.encode_inlined_item)(ecx, ebml_w, IIForeignRef(nitem));
         } else {
@@ -1270,7 +1270,7 @@ fn encode_info_for_foreign_item(ecx: &EncodeContext,
         }
         encode_type(ecx, ebml_w, node_id_to_type(ecx.tcx, nitem.id));
         encode_symbol(ecx, ebml_w, nitem.id);
-        encode_name(ebml_w, nitem.ident);
+        encode_name(ebml_w, nitem.ident.name);
       }
     }
     encode_path(ebml_w, path);
index c78721cdf4c8a021b54a7d8e9fa002fa2cad2181..21fe0e7539438c9e7050264a52cc3d4e346c1d77 100644 (file)
@@ -214,7 +214,7 @@ fn parse_bound_region(st: &mut PState, conv: conv_did) -> ty::BoundRegion {
         '[' => {
             let def = parse_def(st, RegionParameter, |x,y| conv(x,y));
             let ident = token::str_to_ident(parse_str(st, ']'));
-            ty::BrNamed(def, ident)
+            ty::BrNamed(def, ident.name)
         }
         'f' => {
             let id = parse_uint(st);
@@ -242,7 +242,7 @@ fn parse_region(st: &mut PState, conv: conv_did) -> ty::Region {
         let index = parse_uint(st);
         assert_eq!(next(st), '|');
         let nm = token::str_to_ident(parse_str(st, ']'));
-        ty::ReEarlyBound(node_id, index, nm)
+        ty::ReEarlyBound(node_id, index, nm.name)
       }
       'f' => {
         assert_eq!(next(st), '[');
index 545c66063916ef9d00e4ed12284cb29eca2ec342..db0bcf7d029a8e31fa4958788595a60dce0ab3ba 100644 (file)
@@ -179,7 +179,7 @@ fn enc_region(w: &mut MemWriter, cx: @ctxt, r: ty::Region) {
             mywrite!(w, "B[{}|{}|{}]",
                      node_id,
                      index,
-                     token::get_ident(ident));
+                     token::get_name(ident));
         }
         ty::ReFree(ref fr) => {
             mywrite!(w, "f[{}|", fr.scope_id);
@@ -210,7 +210,7 @@ fn enc_bound_region(w: &mut MemWriter, cx: @ctxt, br: ty::BoundRegion) {
         ty::BrNamed(d, s) => {
             mywrite!(w, "[{}|{}]",
                      (cx.ds)(d),
-                     token::get_ident(s));
+                     token::get_name(s));
         }
         ty::BrFresh(id) => {
             mywrite!(w, "f{}|", id);
index 7b7bcc1784226f7d9d02b1a0e37d61c0714fdd6e..b3a975a13e4af3268205eac5efd5f4f550b40a18 100644 (file)
@@ -145,7 +145,7 @@ fn visit_block(&mut self,
     fn visit_lifetime_ref(&mut self,
                           lifetime_ref: &ast::Lifetime,
                           scope: &'a ScopeChain<'a>) {
-        if lifetime_ref.ident == special_idents::statik {
+        if lifetime_ref.ident == special_idents::statik.name {
             self.insert_lifetime(lifetime_ref, ast::DefStaticRegion);
             return;
         }
@@ -262,7 +262,7 @@ fn unresolved_lifetime_ref(&self,
         self.sess.span_err(
             lifetime_ref.span,
             format!("use of undeclared lifetime name `'{}`",
-                    token::get_ident(lifetime_ref.ident)));
+                    token::get_name(lifetime_ref.ident)));
     }
 
     fn check_lifetime_names(&self, lifetimes: &OptVec<ast::Lifetime>) {
@@ -271,11 +271,11 @@ fn check_lifetime_names(&self, lifetimes: &OptVec<ast::Lifetime>) {
 
             let special_idents = [special_idents::statik];
             for lifetime in lifetimes.iter() {
-                if special_idents.iter().any(|&i| i == lifetime.ident) {
+                if special_idents.iter().any(|&i| i.name == lifetime.ident) {
                     self.sess.span_err(
                         lifetime.span,
                         format!("illegal lifetime parameter name: `{}`",
-                                token::get_ident(lifetime.ident)));
+                                token::get_name(lifetime.ident)));
                 }
             }
 
@@ -287,7 +287,7 @@ fn check_lifetime_names(&self, lifetimes: &OptVec<ast::Lifetime>) {
                         lifetime_j.span,
                         format!("lifetime name `'{}` declared twice in \
                                 the same scope",
-                                token::get_ident(lifetime_j.ident)));
+                                token::get_name(lifetime_j.ident)));
                 }
             }
         }
index f3016ff68a80213b8dfe1e71eeb2db503058265c..1fa2dbc16528119091da643c640c753079b8040d 100644 (file)
@@ -465,7 +465,7 @@ pub enum Region {
     // Region bound in a type or fn declaration which will be
     // substituted 'early' -- that is, at the same time when type
     // parameters are substituted.
-    ReEarlyBound(/* param id */ ast::NodeId, /*index*/ uint, ast::Ident),
+    ReEarlyBound(/* param id */ ast::NodeId, /*index*/ uint, ast::Name),
 
     // Region bound in a function scope, which will be substituted when the
     // function is called. The first argument must be the `binder_id` of
@@ -635,7 +635,7 @@ pub enum BoundRegion {
     ///
     /// The def-id is needed to distinguish free regions in
     /// the event of shadowing.
-    BrNamed(ast::DefId, ast::Ident),
+    BrNamed(ast::DefId, ast::Name),
 
     /// Fresh bound identifiers created during GLB computations.
     BrFresh(uint),
@@ -976,7 +976,7 @@ pub struct TypeParameterDef {
 
 #[deriving(Encodable, Decodable, Clone)]
 pub struct RegionParameterDef {
-    ident: ast::Ident,
+    ident: ast::Name,
     def_id: ast::DefId,
 }
 
index 14d12b7f648dda4d8d1c00375fc572af5b852a11..e430015b221461bca5e0b75f358a11d6cf4f0f99 100644 (file)
@@ -163,7 +163,7 @@ pub fn bound_region_to_str(cx: ctxt,
 
     match br {
         BrNamed(_, ident)   => format!("{}'{}{}", prefix,
-                                       token::get_ident(ident), space_str),
+                                       token::get_name(ident), space_str),
         BrAnon(_)           => prefix.to_str(),
         BrFresh(_)          => prefix.to_str(),
     }
@@ -225,7 +225,7 @@ pub fn region_to_str(cx: ctxt, prefix: &str, space: bool, region: Region) -> ~st
     // `explain_region()` or `note_and_explain_region()`.
     match region {
         ty::ReScope(_) => prefix.to_str(),
-        ty::ReEarlyBound(_, _, ident) => token::get_ident(ident).get().to_str(),
+        ty::ReEarlyBound(_, _, ident) => token::get_name(ident).get().to_str(),
         ty::ReLateBound(_, br) => bound_region_to_str(cx, prefix, space, br),
         ty::ReFree(ref fr) => bound_region_to_str(cx, prefix, space, fr.bound_region),
         ty::ReInfer(ReSkolemized(_, br)) => {
@@ -630,7 +630,7 @@ fn repr(&self, tcx: ctxt) -> ~str {
 impl Repr for ty::RegionParameterDef {
     fn repr(&self, _tcx: ctxt) -> ~str {
         format!("RegionParameterDef({}, {:?})",
-                token::get_ident(self.ident),
+                token::get_name(self.ident),
                 self.def_id)
     }
 }
@@ -718,7 +718,7 @@ fn repr(&self, tcx: ctxt) -> ~str {
             ty::BrAnon(id) => format!("BrAnon({})", id),
             ty::BrNamed(id, ident) => format!("BrNamed({}, {})",
                                                id.repr(tcx),
-                                               ident.repr(tcx)),
+                                               token::get_name(ident)),
             ty::BrFresh(id) => format!("BrFresh({})", id),
         }
     }
@@ -729,7 +729,7 @@ fn repr(&self, tcx: ctxt) -> ~str {
         match *self {
             ty::ReEarlyBound(id, index, ident) => {
                 format!("ReEarlyBound({}, {}, {})",
-                        id, index, ident.repr(tcx))
+                        id, index, token::get_name(ident))
             }
 
             ty::ReLateBound(binder_id, ref bound_region) => {
index 586323358c241234494ea2560f6e0954957208e5..6e6276e0457b7bdef6bb2a069bcc0d4a8be5ef1f 100644 (file)
@@ -307,7 +307,7 @@ pub fn get_ref<'a>(&'a self) -> &'a str {
 
 impl Clean<Lifetime> for ast::Lifetime {
     fn clean(&self) -> Lifetime {
-        Lifetime(self.ident.clean())
+        Lifetime(token::get_name(self.ident).get().to_owned())
     }
 }
 
index e8edc1a0dfc0e4ac53d2c87c6d6950bf8e96c19e..8f3f1787a58744a90ff516dd37217435640e46f9 100644 (file)
@@ -144,8 +144,7 @@ fn decode(d: &mut D) -> Ident {
 pub struct Lifetime {
     id: NodeId,
     span: Span,
-    // FIXME #7743 : change this to Name!
-    ident: Ident
+    ident: Name
 }
 
 // a "Path" is essentially Rust's notion of a name;
index d311a542ac689f4074a78cf06eb44c22d80f181a..2265e42af4df24a64e589cd51c25da9a617f283a 100644 (file)
@@ -73,7 +73,7 @@ fn typaram(&self,
 
     fn trait_ref(&self, path: ast::Path) -> ast::TraitRef;
     fn typarambound(&self, path: ast::Path) -> ast::TyParamBound;
-    fn lifetime(&self, span: Span, ident: ast::Ident) -> ast::Lifetime;
+    fn lifetime(&self, span: Span, ident: ast::Name) -> ast::Lifetime;
 
     // statements
     fn stmt_expr(&self, expr: @ast::Expr) -> @ast::Stmt;
@@ -408,7 +408,7 @@ fn typarambound(&self, path: ast::Path) -> ast::TyParamBound {
         ast::TraitTyParamBound(self.trait_ref(path))
     }
 
-    fn lifetime(&self, span: Span, ident: ast::Ident) -> ast::Lifetime {
+    fn lifetime(&self, span: Span, ident: ast::Name) -> ast::Lifetime {
         ast::Lifetime { id: ast::DUMMY_NODE_ID, span: span, ident: ident }
     }
 
index ff0fd388ebe6d4823992da6200c789c3233b2744..1d3dd9185caae8bf6db17be80390ed9717c40078 100644 (file)
@@ -111,14 +111,14 @@ pub fn nil_ty() -> Ty<'static> {
 
 fn mk_lifetime(cx: &ExtCtxt, span: Span, lt: &Option<&str>) -> Option<ast::Lifetime> {
     match *lt {
-        Some(ref s) => Some(cx.lifetime(span, cx.ident_of(*s))),
+        Some(ref s) => Some(cx.lifetime(span, cx.ident_of(*s).name)),
         None => None
     }
 }
 
 fn mk_lifetimes(cx: &ExtCtxt, span: Span, lt: &Option<&str>) -> OptVec<ast::Lifetime> {
     match *lt {
-        Some(ref s) => opt_vec::with(cx.lifetime(span, cx.ident_of(*s))),
+        Some(ref s) => opt_vec::with(cx.lifetime(span, cx.ident_of(*s).name)),
         None => opt_vec::Empty
     }
 }
@@ -221,7 +221,7 @@ pub fn to_generics(&self,
                        self_generics: &Generics)
                        -> Generics {
         let lifetimes = self.lifetimes.map(|lt| {
-            cx.lifetime(span, cx.ident_of(*lt))
+            cx.lifetime(span, cx.ident_of(*lt).name)
         });
         let ty_params = self.bounds.map(|t| {
             match t {
@@ -248,7 +248,7 @@ pub fn get_explicit_self(cx: &ExtCtxt, span: Span, self_ptr: &Option<PtrTy>)
                 match *ptr {
                     Send => ast::SelfUniq,
                     Borrowed(ref lt, mutbl) => {
-                        let lt = lt.map(|s| cx.lifetime(span, cx.ident_of(s)));
+                        let lt = lt.map(|s| cx.lifetime(span, cx.ident_of(s).name));
                         ast::SelfRegion(lt, mutbl)
                     }
                 });
index d7a2647c34d07af9aaebdb7ae3800f16b4c97a3f..16a12661e9dbb580f087e30a98d90fda12061389 100644 (file)
@@ -497,7 +497,7 @@ fn trans_method(&mut self, method: &parse::Method) -> @ast::Expr {
                         ])
             }
         };
-        let life = self.ecx.lifetime(sp, self.ecx.ident_of("static"));
+        let life = self.ecx.lifetime(sp, self.ecx.ident_of("static").name);
         let ty = self.ecx.ty_path(self.ecx.path_all(
                 sp,
                 true,
@@ -629,7 +629,7 @@ fn to_expr(&self, extra: @ast::Expr) -> @ast::Expr {
                     self.ecx.ident_of("Piece"),
                 ],
                 opt_vec::with(
-                    self.ecx.lifetime(self.fmtsp, self.ecx.ident_of("static"))),
+                    self.ecx.lifetime(self.fmtsp, self.ecx.ident_of("static").name)),
                 ~[]
             ), None);
         let ty = ast::TyFixedLengthVec(
index 6cde22fad107cfa293333bf5251eb6e93020585c..30e77c8c1cb7b2a3b9b3c62c7215493894d0929a 100644 (file)
@@ -1596,7 +1596,7 @@ pub fn parse_lifetime(&mut self) -> ast::Lifetime {
                 return ast::Lifetime {
                     id: ast::DUMMY_NODE_ID,
                     span: span,
-                    ident: i
+                    ident: i.name
                 };
             }
             _ => {
index 21e1998208c96b99e0a1b9cad35923354d3fcd3f..fb061bbc0a69676e14ca5335c688cd6bfde3e6a7 100644 (file)
@@ -1951,7 +1951,7 @@ pub fn print_bounds(s: &mut State, bounds: &OptVec<ast::TyParamBound>,
 pub fn print_lifetime(s: &mut State,
                       lifetime: &ast::Lifetime) -> io::IoResult<()> {
     try!(word(&mut s.s, "'"));
-    print_ident(s, lifetime.ident)
+    print_name(s, lifetime.ident)
 }
 
 pub fn print_generics(s: &mut State,