@@ -111,13 +111,6 @@ pub enum PathParsingMode {
111111 LifetimeAndTypesAndBounds ,
112112}
113113
114- /// A pair of a path segment and group of type parameter bounds. (See `ast.rs`
115- /// for the definition of a path segment.)
116- struct PathSegmentAndBoundSet {
117- segment : ast:: PathSegment ,
118- bound_set : Option < OwnedSlice < TyParamBound > > ,
119- }
120-
121114/// A path paired with optional type bounds.
122115pub struct PathAndBounds {
123116 path : ast:: Path ,
@@ -1514,24 +1507,14 @@ impl<'a> Parser<'a> {
15141507 // First, parse an identifier.
15151508 let identifier = self . parse_ident ( ) ;
15161509
1517- // Next, parse a colon and bounded type parameters, if applicable.
1518- let bound_set = if mode == LifetimeAndTypesAndBounds {
1519- self . parse_optional_ty_param_bounds ( )
1520- } else {
1521- None
1522- } ;
1523-
15241510 // Parse the '::' before type parameters if it's required. If
15251511 // it is required and wasn't present, then we're done.
15261512 if mode == LifetimeAndTypesWithColons &&
15271513 !self . eat ( & token:: MOD_SEP ) {
1528- segments. push ( PathSegmentAndBoundSet {
1529- segment : ast:: PathSegment {
1530- identifier : identifier,
1531- lifetimes : Vec :: new ( ) ,
1532- types : OwnedSlice :: empty ( ) ,
1533- } ,
1534- bound_set : bound_set
1514+ segments. push ( ast:: PathSegment {
1515+ identifier : identifier,
1516+ lifetimes : Vec :: new ( ) ,
1517+ types : OwnedSlice :: empty ( ) ,
15351518 } ) ;
15361519 break
15371520 }
@@ -1548,13 +1531,10 @@ impl<'a> Parser<'a> {
15481531 } ;
15491532
15501533 // Assemble and push the result.
1551- segments. push ( PathSegmentAndBoundSet {
1552- segment : ast:: PathSegment {
1553- identifier : identifier,
1554- lifetimes : lifetimes,
1555- types : types,
1556- } ,
1557- bound_set : bound_set
1534+ segments. push ( ast:: PathSegment {
1535+ identifier : identifier,
1536+ lifetimes : lifetimes,
1537+ types : types,
15581538 } ) ;
15591539
15601540 // We're done if we don't see a '::', unless the mode required
@@ -1567,42 +1547,25 @@ impl<'a> Parser<'a> {
15671547 }
15681548 }
15691549
1550+ // Next, parse a colon and bounded type parameters, if applicable.
1551+ let bounds = if mode == LifetimeAndTypesAndBounds {
1552+ self . parse_optional_ty_param_bounds ( )
1553+ } else {
1554+ None
1555+ } ;
1556+
15701557 // Assemble the span.
15711558 let span = mk_sp ( lo, self . last_span . hi ) ;
15721559
1573- // Assemble the path segments.
1574- let mut path_segments = Vec :: new ( ) ;
1575- let mut bounds = None ;
1576- let last_segment_index = segments. len ( ) - 1 ;
1577- for ( i, segment_and_bounds) in segments. move_iter ( ) . enumerate ( ) {
1578- let PathSegmentAndBoundSet {
1579- segment : segment,
1580- bound_set : bound_set
1581- } = segment_and_bounds;
1582- path_segments. push ( segment) ;
1583-
1584- if bound_set. is_some ( ) {
1585- if i != last_segment_index {
1586- self . span_err ( span,
1587- "type parameter bounds are allowed only \
1588- before the last segment in a path")
1589- }
1590-
1591- bounds = bound_set
1592- }
1593- }
1594-
15951560 // Assemble the result.
1596- let path_and_bounds = PathAndBounds {
1561+ PathAndBounds {
15971562 path : ast:: Path {
15981563 span : span,
15991564 global : is_global,
1600- segments : path_segments ,
1565+ segments : segments ,
16011566 } ,
16021567 bounds : bounds,
1603- } ;
1604-
1605- path_and_bounds
1568+ }
16061569 }
16071570
16081571 /// parses 0 or 1 lifetime
0 commit comments