From 5fe2f01dee7794dc30aee7ceabf2b9e3fba25cca Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Fri, 2 May 2014 14:04:26 -0400 Subject: Temporary patch to accept arbitrary lifetimes (behind feature gate) in bound lists. This is needed to bootstrap fix for #5723. --- src/libsyntax/ast.rs | 3 ++- src/libsyntax/fold.rs | 3 ++- src/libsyntax/parse/parser.rs | 7 +++---- src/libsyntax/print/pprust.rs | 6 ++++-- src/libsyntax/visit.rs | 3 ++- 5 files changed, 13 insertions(+), 9 deletions(-) (limited to 'src/libsyntax') diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index 45f753d0e98..b65215e71a6 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -173,7 +173,8 @@ pub static DUMMY_NODE_ID: NodeId = -1; #[deriving(Clone, Eq, TotalEq, Encodable, Decodable, Hash)] pub enum TyParamBound { TraitTyParamBound(TraitRef), - RegionTyParamBound + StaticRegionTyParamBound, + OtherRegionTyParamBound(Span) // FIXME -- just here until work for #5723 lands } #[deriving(Clone, Eq, TotalEq, Encodable, Decodable, Hash)] diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs index 47ef23b82d2..685e08dd918 100644 --- a/src/libsyntax/fold.rs +++ b/src/libsyntax/fold.rs @@ -437,7 +437,8 @@ fn fold_ty_param_bound(tpb: &TyParamBound, fld: &mut T) -> TyParamBound { match *tpb { TraitTyParamBound(ref ty) => TraitTyParamBound(fold_trait_ref(ty, fld)), - RegionTyParamBound => RegionTyParamBound + StaticRegionTyParamBound => StaticRegionTyParamBound, + OtherRegionTyParamBound(s) => OtherRegionTyParamBound(s) } } diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 5d8443b64d5..1917ea2dafb 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -12,7 +12,7 @@ use abi; use ast::{BareFnTy, ClosureTy}; -use ast::{RegionTyParamBound, TraitTyParamBound}; +use ast::{StaticRegionTyParamBound, OtherRegionTyParamBound, TraitTyParamBound}; use ast::{Provided, Public, FnStyle}; use ast::{Mod, BiAdd, Arg, Arm, Attribute, BindByRef, BindByValue}; use ast::{BiBitAnd, BiBitOr, BiBitXor, Block}; @@ -3351,7 +3351,7 @@ impl<'a> Parser<'a> { token::LIFETIME(lifetime) => { let lifetime_interned_string = token::get_ident(lifetime); if lifetime_interned_string.equiv(&("static")) { - result.push(RegionTyParamBound); + result.push(StaticRegionTyParamBound); if allow_any_lifetime && ret_lifetime.is_none() { ret_lifetime = Some(ast::Lifetime { id: ast::DUMMY_NODE_ID, @@ -3366,8 +3366,7 @@ impl<'a> Parser<'a> { name: lifetime.name }); } else { - self.span_err(self.span, - "`'static` is the only permissible region bound here"); + result.push(OtherRegionTyParamBound(self.span)); } self.bump(); } diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index 7ea4dcbf28a..09e0684ba29 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -9,7 +9,8 @@ // except according to those terms. use abi; -use ast::{P, RegionTyParamBound, TraitTyParamBound, Required, Provided}; +use ast::{P, StaticRegionTyParamBound, OtherRegionTyParamBound, + TraitTyParamBound, Required, Provided}; use ast; use ast_util; use owned_slice::OwnedSlice; @@ -1882,7 +1883,8 @@ impl<'a> State<'a> { try!(match *bound { TraitTyParamBound(ref tref) => self.print_trait_ref(tref), - RegionTyParamBound => word(&mut self.s, "'static"), + StaticRegionTyParamBound => word(&mut self.s, "'static"), + OtherRegionTyParamBound(_) => Ok(()) }) } Ok(()) diff --git a/src/libsyntax/visit.rs b/src/libsyntax/visit.rs index 260ba247092..f715b3a68ae 100644 --- a/src/libsyntax/visit.rs +++ b/src/libsyntax/visit.rs @@ -472,7 +472,8 @@ pub fn walk_ty_param_bounds>(visitor: &mut V, TraitTyParamBound(ref typ) => { walk_trait_ref_helper(visitor, typ, env.clone()) } - RegionTyParamBound => {} + StaticRegionTyParamBound => {} + OtherRegionTyParamBound(..) => {} } } } -- cgit 1.4.1-3-g733a5