@@ -21,7 +21,8 @@ const RANGE_PAT_END_FIRST: TokenSet =
2121 expressions:: LITERAL_FIRST . union ( paths:: PATH_FIRST ) . union ( TokenSet :: new ( & [ T ! [ -] , T ! [ const ] ] ) ) ;
2222
2323pub ( crate ) fn pattern ( p : & mut Parser < ' _ > ) {
24- pattern_r ( p, PAT_RECOVERY_SET ) ;
24+ let m = p. start ( ) ;
25+ pattern_r ( p, m, false , PAT_RECOVERY_SET ) ;
2526}
2627
2728/// Parses a pattern list separated by pipes `|`.
@@ -36,8 +37,9 @@ pub(crate) fn pattern_single(p: &mut Parser<'_>) {
3637/// Parses a pattern list separated by pipes `|`
3738/// using the given `recovery_set`.
3839pub ( super ) fn pattern_top_r ( p : & mut Parser < ' _ > , recovery_set : TokenSet ) {
39- p. eat ( T ! [ |] ) ;
40- pattern_r ( p, recovery_set) ;
40+ let m = p. start ( ) ;
41+ let has_leading_pipe = p. eat ( T ! [ |] ) ;
42+ pattern_r ( p, m, has_leading_pipe, recovery_set) ;
4143}
4244
4345// test or_pattern
@@ -51,11 +53,10 @@ pub(super) fn pattern_top_r(p: &mut Parser<'_>, recovery_set: TokenSet) {
5153// }
5254/// Parses a pattern list separated by pipes `|`, with no leading `|`,using the
5355/// given `recovery_set`.
54- fn pattern_r ( p : & mut Parser < ' _ > , recovery_set : TokenSet ) {
55- let m = p. start ( ) ;
56+ fn pattern_r ( p : & mut Parser < ' _ > , m : Marker , has_leading_pipe : bool , recovery_set : TokenSet ) {
5657 pattern_single_r ( p, recovery_set) ;
5758
58- if !p. at ( T ! [ |] ) {
59+ if !p. at ( T ! [ |] ) && !has_leading_pipe {
5960 m. abandon ( p) ;
6061 return ;
6162 }
0 commit comments