@@ -930,15 +930,38 @@ impl<'a> Parser<'a> {
930930 }
931931
932932 let frame = & self . token_cursor . frame ;
933- match frame. tree_cursor . look_ahead ( dist - 1 ) {
934- Some ( tree) => match tree {
935- TokenTree :: Token ( token) => looker ( token) ,
936- TokenTree :: Delimited ( dspan, delim, _) => {
937- looker ( & Token :: new ( token:: OpenDelim ( * delim) , dspan. open ) )
938- }
939- } ,
940- None => looker ( & Token :: new ( token:: CloseDelim ( frame. delim ) , frame. span . close ) ) ,
933+ if frame. delim != DelimToken :: NoDelim {
934+ let all_normal = ( 0 ..dist) . all ( |i| {
935+ let token = frame. tree_cursor . look_ahead ( i) ;
936+ !matches ! ( token, Some ( TokenTree :: Delimited ( _, DelimToken :: NoDelim , _) ) )
937+ } ) ;
938+ if all_normal {
939+ return match frame. tree_cursor . look_ahead ( dist - 1 ) {
940+ Some ( tree) => match tree {
941+ TokenTree :: Token ( token) => looker ( token) ,
942+ TokenTree :: Delimited ( dspan, delim, _) => {
943+ looker ( & Token :: new ( token:: OpenDelim ( * delim) , dspan. open ) )
944+ }
945+ } ,
946+ None => looker ( & Token :: new ( token:: CloseDelim ( frame. delim ) , frame. span . close ) ) ,
947+ } ;
948+ }
949+ }
950+
951+ let mut cursor = self . token_cursor . clone ( ) ;
952+ let mut i = 0 ;
953+ let mut token = Token :: dummy ( ) ;
954+ while i < dist {
955+ token = cursor. next ( ) . 0 ;
956+ if matches ! (
957+ token. kind,
958+ token:: OpenDelim ( token:: NoDelim ) | token:: CloseDelim ( token:: NoDelim )
959+ ) {
960+ continue ;
961+ }
962+ i += 1 ;
941963 }
964+ return looker ( & token) ;
942965 }
943966
944967 /// Returns whether any of the given keywords are `dist` tokens ahead of the current one.
0 commit comments