diff options
| author | Eduard Burtescu <edy.burt@gmail.com> | 2015-01-30 10:09:44 +0200 |
|---|---|---|
| committer | Eduard Burtescu <edy.burt@gmail.com> | 2015-02-24 14:14:16 +0200 |
| commit | 004df413aa35b3d610faf231682cfbae5d4eeb46 (patch) | |
| tree | d78c535eed44d9f6056b7fc8775becf7fd896802 /src/libsyntax | |
| parent | a817c69297dc2bfac4029410cc055d32022cea95 (diff) | |
| download | rust-004df413aa35b3d610faf231682cfbae5d4eeb46.tar.gz rust-004df413aa35b3d610faf231682cfbae5d4eeb46.zip | |
syntax: don't use TraitRef in QPath.
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/ast.rs | 8 | ||||
| -rw-r--r-- | src/libsyntax/ast_util.rs | 9 | ||||
| -rw-r--r-- | src/libsyntax/fold.rs | 8 | ||||
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 8 | ||||
| -rw-r--r-- | src/libsyntax/print/pprust.rs | 2 | ||||
| -rw-r--r-- | src/libsyntax/visit.rs | 20 |
6 files changed, 29 insertions, 26 deletions
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index 7c83286f656..5f9776425c3 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -782,11 +782,11 @@ pub enum Expr_ { /// /// <Vec<T> as SomeTrait>::SomeAssociatedItem /// ^~~~~ ^~~~~~~~~ ^~~~~~~~~~~~~~~~~~ -/// self_type trait_name item_path +/// self_type trait_path item_path #[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)] pub struct QPath { pub self_type: P<Ty>, - pub trait_ref: P<TraitRef>, + pub trait_path: Path, pub item_path: PathSegment, } @@ -1258,12 +1258,12 @@ pub enum Ty_ { /// /// Type parameters are stored in the Path itself TyPath(Path), + /// A "qualified path", e.g. `<Vec<T> as SomeTrait>::SomeType` + TyQPath(P<QPath>), /// Something like `A+B`. Note that `B` must always be a path. TyObjectSum(P<Ty>, TyParamBounds), /// A type like `for<'a> Foo<&'a Bar>` TyPolyTraitRef(TyParamBounds), - /// A "qualified path", e.g. `<Vec<T> as SomeTrait>::SomeType` - TyQPath(P<QPath>), /// No-op; kept solely so that we can pretty-print faithfully TyParen(P<Ty>), /// Unused for now diff --git a/src/libsyntax/ast_util.rs b/src/libsyntax/ast_util.rs index 6ea37aaf72c..f207efc5b6c 100644 --- a/src/libsyntax/ast_util.rs +++ b/src/libsyntax/ast_util.rs @@ -561,13 +561,18 @@ impl<'a, 'v, O: IdVisitingOperation> Visitor<'v> for IdVisitor<'a, O> { visit::walk_trait_item(self, tm); } - fn visit_lifetime_ref(&mut self, lifetime: &'v Lifetime) { + fn visit_lifetime_ref(&mut self, lifetime: &Lifetime) { self.operation.visit_id(lifetime.id); } - fn visit_lifetime_def(&mut self, def: &'v LifetimeDef) { + fn visit_lifetime_def(&mut self, def: &LifetimeDef) { self.visit_lifetime_ref(&def.lifetime); } + + fn visit_trait_ref(&mut self, trait_ref: &TraitRef) { + self.operation.visit_id(trait_ref.ref_id); + visit::walk_trait_ref(self, trait_ref); + } } pub fn visit_ids_for_inlined_item<O: IdVisitingOperation>(item: &InlinedItem, diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs index ae4d2a80045..c0421fb6f1c 100644 --- a/src/libsyntax/fold.rs +++ b/src/libsyntax/fold.rs @@ -429,13 +429,13 @@ pub fn noop_fold_ty<T: Folder>(t: P<Ty>, fld: &mut T) -> P<Ty> { TyTup(tys) => TyTup(tys.move_map(|ty| fld.fold_ty(ty))), TyParen(ty) => TyParen(fld.fold_ty(ty)), TyPath(path) => TyPath(fld.fold_path(path)), + TyQPath(qpath) => { + TyQPath(fld.fold_qpath(qpath)) + } TyObjectSum(ty, bounds) => { TyObjectSum(fld.fold_ty(ty), fld.fold_bounds(bounds)) } - TyQPath(qpath) => { - TyQPath(fld.fold_qpath(qpath)) - } TyFixedLengthVec(ty, e) => { TyFixedLengthVec(fld.fold_ty(ty), fld.fold_expr(e)) } @@ -454,7 +454,7 @@ pub fn noop_fold_qpath<T: Folder>(qpath: P<QPath>, fld: &mut T) -> P<QPath> { qpath.map(|qpath| { QPath { self_type: fld.fold_ty(qpath.self_type), - trait_ref: qpath.trait_ref.map(|tr| fld.fold_trait_ref(tr)), + trait_path: fld.fold_path(qpath.trait_path), item_path: PathSegment { identifier: fld.fold_ident(qpath.item_path.identifier), parameters: fld.fold_path_parameters(qpath.item_path.parameters), diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index bcef7238d7f..b2f59725855 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -1525,13 +1525,13 @@ impl<'a> Parser<'a> { // QUALIFIED PATH `<TYPE as TRAIT_REF>::item` let self_type = self.parse_ty_sum(); self.expect_keyword(keywords::As); - let trait_ref = self.parse_trait_ref(); + let trait_path = self.parse_path(LifetimeAndTypesWithoutColons); self.expect(&token::Gt); self.expect(&token::ModSep); let item_name = self.parse_ident(); TyQPath(P(QPath { self_type: self_type, - trait_ref: P(trait_ref), + trait_path: trait_path, item_path: ast::PathSegment { identifier: item_name, parameters: ast::PathParameters::none() @@ -2220,7 +2220,7 @@ impl<'a> Parser<'a> { // QUALIFIED PATH `<TYPE as TRAIT_REF>::item::<'a, T>` let self_type = self.parse_ty_sum(); self.expect_keyword(keywords::As); - let trait_ref = self.parse_trait_ref(); + let trait_path = self.parse_path(LifetimeAndTypesWithoutColons); self.expect(&token::Gt); self.expect(&token::ModSep); let item_name = self.parse_ident(); @@ -2240,7 +2240,7 @@ impl<'a> Parser<'a> { let hi = self.span.hi; return self.mk_expr(lo, hi, ExprQPath(P(QPath { self_type: self_type, - trait_ref: P(trait_ref), + trait_path: trait_path, item_path: ast::PathSegment { identifier: item_name, parameters: parameters diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index 752d34a19c6..3cfb90a3e68 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -2047,7 +2047,7 @@ impl<'a> State<'a> { try!(self.print_type(&*qpath.self_type)); try!(space(&mut self.s)); try!(self.word_space("as")); - try!(self.print_trait_ref(&*qpath.trait_ref)); + try!(self.print_path(&qpath.trait_path, false)); try!(word(&mut self.s, ">")); try!(word(&mut self.s, "::")); try!(self.print_ident(qpath.item_path.identifier)); diff --git a/src/libsyntax/visit.rs b/src/libsyntax/visit.rs index 4586495227d..4e90adea90c 100644 --- a/src/libsyntax/visit.rs +++ b/src/libsyntax/visit.rs @@ -125,8 +125,8 @@ pub trait Visitor<'v> : Sized { fn visit_path(&mut self, path: &'v Path, _id: ast::NodeId) { walk_path(self, path) } - fn visit_qpath(&mut self, qpath_span: Span, qpath: &'v QPath) { - walk_qpath(self, qpath_span, qpath) + fn visit_qpath(&mut self, qpath: &'v QPath, _id: ast::NodeId) { + walk_qpath(self, qpath) } fn visit_path_segment(&mut self, path_span: Span, path_segment: &'v PathSegment) { walk_path_segment(self, path_span, path_segment) @@ -402,13 +402,13 @@ pub fn walk_ty<'v, V: Visitor<'v>>(visitor: &mut V, typ: &'v Ty) { TyPath(ref path) => { visitor.visit_path(path, typ.id); } + TyQPath(ref qpath) => { + visitor.visit_qpath(&**qpath, typ.id); + } TyObjectSum(ref ty, ref bounds) => { visitor.visit_ty(&**ty); walk_ty_param_bounds_helper(visitor, bounds); } - TyQPath(ref qpath) => { - visitor.visit_qpath(typ.span, &**qpath); - } TyFixedLengthVec(ref ty, ref expression) => { visitor.visit_ty(&**ty); visitor.visit_expr(&**expression) @@ -436,12 +436,10 @@ pub fn walk_path<'v, V: Visitor<'v>>(visitor: &mut V, path: &'v Path) { } } -pub fn walk_qpath<'v, V: Visitor<'v>>(visitor: &mut V, - qpath_span: Span, - qpath: &'v QPath) { +pub fn walk_qpath<'v, V: Visitor<'v>>(visitor: &mut V, qpath: &'v QPath) { visitor.visit_ty(&*qpath.self_type); - visitor.visit_trait_ref(&*qpath.trait_ref); - visitor.visit_path_segment(qpath_span, &qpath.item_path); + walk_path(visitor, &qpath.trait_path); + visitor.visit_path_segment(qpath.trait_path.span, &qpath.item_path); } pub fn walk_path_segment<'v, V: Visitor<'v>>(visitor: &mut V, @@ -873,7 +871,7 @@ pub fn walk_expr<'v, V: Visitor<'v>>(visitor: &mut V, expression: &'v Expr) { visitor.visit_path(path, expression.id) } ExprQPath(ref qpath) => { - visitor.visit_qpath(expression.span, &**qpath) + visitor.visit_qpath(&**qpath, expression.id) } ExprBreak(_) | ExprAgain(_) => {} ExprRet(ref optional_expression) => { |
