@@ -574,10 +574,12 @@ impl<'a> Parser<'a> {
574574 pub fn parse_path_list_item ( & mut self ) -> PResult < ast:: PathListItem > {
575575 let lo = self . span . lo ;
576576 let node = if try!( self . eat_keyword ( keywords:: SelfValue ) ) {
577- ast:: PathListMod { id : ast:: DUMMY_NODE_ID }
577+ let rename = try!( self . parse_rename ( ) ) ;
578+ ast:: PathListMod { id : ast:: DUMMY_NODE_ID , rename : rename }
578579 } else {
579580 let ident = try!( self . parse_ident ( ) ) ;
580- ast:: PathListIdent { name : ident, id : ast:: DUMMY_NODE_ID }
581+ let rename = try!( self . parse_rename ( ) ) ;
582+ ast:: PathListIdent { name : ident, rename : rename, id : ast:: DUMMY_NODE_ID }
581583 } ;
582584 let hi = self . last_span . hi ;
583585 Ok ( spanned ( lo, hi, node) )
@@ -5117,8 +5119,8 @@ impl<'a> Parser<'a> {
51175119 -> PResult < P < Item > > {
51185120
51195121 let crate_name = try!( self . parse_ident ( ) ) ;
5120- let ( maybe_path, ident) = if try!( self . eat_keyword ( keywords :: As ) ) {
5121- ( Some ( crate_name. name ) , try! ( self . parse_ident ( ) ) )
5122+ let ( maybe_path, ident) = if let Some ( ident ) = try!( self . parse_rename ( ) ) {
5123+ ( Some ( crate_name. name ) , ident )
51225124 } else {
51235125 ( None , crate_name)
51245126 } ;
@@ -5779,10 +5781,16 @@ impl<'a> Parser<'a> {
57795781 }
57805782 } ) . collect ( )
57815783 } ;
5784+ rename_to = try!( self . parse_rename ( ) ) . unwrap_or ( rename_to) ;
5785+ Ok ( P ( spanned ( lo, self . last_span . hi , ViewPathSimple ( rename_to, path) ) ) )
5786+ }
5787+
5788+ fn parse_rename ( & mut self ) -> PResult < Option < Ident > > {
57825789 if try!( self . eat_keyword ( keywords:: As ) ) {
5783- rename_to = try!( self . parse_ident ( ) )
5790+ self . parse_ident ( ) . map ( Some )
5791+ } else {
5792+ Ok ( None )
57845793 }
5785- Ok ( P ( spanned ( lo, self . last_span . hi , ViewPathSimple ( rename_to, path) ) ) )
57865794 }
57875795
57885796 /// Parses a source module as a crate. This is the main
0 commit comments