@@ -837,7 +837,7 @@ impl<'a> TtIter<'a> {
837
837
} ,
838
838
Err ( _) => false ,
839
839
} ,
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 ( ) {
841
841
Ok ( rhs) => rhs. char == lhss[ idx] . char ,
842
842
Err ( _) => false ,
843
843
} ,
@@ -850,52 +850,21 @@ impl<'a> TtIter<'a> {
850
850
}
851
851
852
852
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 } ) )
892
860
}
893
- _ => Ok ( tt) ,
861
+ } else {
862
+ self . next ( ) . ok_or ( ( ) ) . cloned ( )
894
863
}
895
864
}
896
865
897
866
fn expect_lifetime ( & mut self ) -> Result < tt:: TokenTree , ( ) > {
898
- let punct = self . expect_punct ( ) ?;
867
+ let punct = self . expect_single_punct ( ) ?;
899
868
if punct. char != '\'' {
900
869
return Err ( ( ) ) ;
901
870
}
0 commit comments