@@ -837,7 +837,7 @@ impl<'a> TtIter<'a> {
837837 } ,
838838 Err ( _) => false ,
839839 } ,
840- Separator :: Puncts ( lhss) if idx < lhss. len ( ) => match fork. expect_punct ( ) {
840+ Separator :: Puncts ( lhss) if idx < lhss. len ( ) => match fork. expect_single_punct ( ) {
841841 Ok ( rhs) => rhs. char == lhss[ idx] . char ,
842842 Err ( _) => false ,
843843 } ,
@@ -850,52 +850,21 @@ impl<'a> TtIter<'a> {
850850 }
851851
852852 fn expect_tt ( & mut self ) -> Result < tt:: TokenTree , ( ) > {
853- match self . peek_n ( 0 ) {
854- Some ( tt:: TokenTree :: Leaf ( tt:: Leaf :: Punct ( punct) ) ) if punct. char == '\'' => {
855- return self . expect_lifetime ( ) ;
856- }
857- _ => ( ) ,
858- }
859-
860- let tt = self . next ( ) . ok_or ( ( ) ) ?. clone ( ) ;
861- let punct = match tt {
862- tt:: TokenTree :: Leaf ( tt:: Leaf :: Punct ( punct) ) if punct. spacing == tt:: Spacing :: Joint => {
863- punct
864- }
865- _ => return Ok ( tt) ,
866- } ;
867-
868- let ( second, third) = match ( self . peek_n ( 0 ) , self . peek_n ( 1 ) ) {
869- (
870- Some ( tt:: TokenTree :: Leaf ( tt:: Leaf :: Punct ( p2) ) ) ,
871- Some ( tt:: TokenTree :: Leaf ( tt:: Leaf :: Punct ( p3) ) ) ,
872- ) if p2. spacing == tt:: Spacing :: Joint => ( p2. char , Some ( p3. char ) ) ,
873- ( Some ( tt:: TokenTree :: Leaf ( tt:: Leaf :: Punct ( p2) ) ) , _) => ( p2. char , None ) ,
874- _ => return Ok ( tt) ,
875- } ;
876-
877- match ( punct. char , second, third) {
878- ( '.' , '.' , Some ( '.' | '=' ) ) | ( '<' , '<' , Some ( '=' ) ) | ( '>' , '>' , Some ( '=' ) ) => {
879- let tt2 = self . next ( ) . unwrap ( ) . clone ( ) ;
880- let tt3 = self . next ( ) . unwrap ( ) . clone ( ) ;
881- Ok ( tt:: Subtree { delimiter : None , token_trees : vec ! [ tt, tt2, tt3] } . into ( ) )
882- }
883- ( '-' | '!' | '*' | '/' | '&' | '%' | '^' | '+' | '<' | '=' | '>' | '|' , '=' , _)
884- | ( '-' | '=' | '>' , '>' , _)
885- | ( ':' , ':' , _)
886- | ( '.' , '.' , _)
887- | ( '&' , '&' , _)
888- | ( '<' , '<' , _)
889- | ( '|' , '|' , _) => {
890- let tt2 = self . next ( ) . unwrap ( ) . clone ( ) ;
891- Ok ( tt:: Subtree { delimiter : None , token_trees : vec ! [ tt, tt2] } . into ( ) )
853+ if let Some ( tt:: TokenTree :: Leaf ( tt:: Leaf :: Punct ( punct) ) ) = self . peek_n ( 0 ) {
854+ if punct. char == '\'' {
855+ self . expect_lifetime ( )
856+ } else {
857+ let puncts = self . expect_glued_punct ( ) ?;
858+ let token_trees = puncts. into_iter ( ) . map ( |p| tt:: Leaf :: Punct ( p) . into ( ) ) . collect ( ) ;
859+ Ok ( tt:: TokenTree :: Subtree ( tt:: Subtree { delimiter : None , token_trees } ) )
892860 }
893- _ => Ok ( tt) ,
861+ } else {
862+ self . next ( ) . ok_or ( ( ) ) . cloned ( )
894863 }
895864 }
896865
897866 fn expect_lifetime ( & mut self ) -> Result < tt:: TokenTree , ( ) > {
898- let punct = self . expect_punct ( ) ?;
867+ let punct = self . expect_single_punct ( ) ?;
899868 if punct. char != '\'' {
900869 return Err ( ( ) ) ;
901870 }
0 commit comments