@@ -4,6 +4,7 @@ use rustc_ast::{AnonConst, DUMMY_NODE_ID, Ty, TyPat, TyPatKind, ast, token};
44use  rustc_errors:: PResult ; 
55use  rustc_expand:: base:: { self ,  DummyResult ,  ExpandResult ,  ExtCtxt ,  MacroExpanderResult } ; 
66use  rustc_parse:: exp; 
7+ use  rustc_parse:: parser:: { CommaRecoveryMode ,  RecoverColon ,  RecoverComma } ; 
78use  rustc_span:: Span ; 
89
910pub ( crate )  fn  expand < ' cx > ( 
@@ -27,7 +28,17 @@ fn parse_pat_ty<'a>(cx: &mut ExtCtxt<'a>, stream: TokenStream) -> PResult<'a, (P
2728    let  ty = parser. parse_ty ( ) ?; 
2829    parser. expect_keyword ( exp ! ( Is ) ) ?; 
2930
30-     let  pat = pat_to_ty_pat ( cx,  parser. parse_pat_no_top_alt ( None ,  None ) ?. into_inner ( ) ) ; 
31+     let  pat = pat_to_ty_pat ( 
32+         cx, 
33+         parser
34+             . parse_pat_no_top_guard ( 
35+                 None , 
36+                 RecoverComma :: No , 
37+                 RecoverColon :: No , 
38+                 CommaRecoveryMode :: EitherTupleOrPipe , 
39+             ) ?
40+             . into_inner ( ) , 
41+     ) ; 
3142
3243    if  parser. token  != token:: Eof  { 
3344        parser. unexpected ( ) ?; 
@@ -47,6 +58,9 @@ fn pat_to_ty_pat(cx: &mut ExtCtxt<'_>, pat: ast::Pat) -> P<TyPat> {
4758            end. map ( |value| P ( AnonConst  {  id :  DUMMY_NODE_ID ,  value } ) ) , 
4859            include_end, 
4960        ) , 
61+         ast:: PatKind :: Or ( variants)  => TyPatKind :: Or ( 
62+             variants. into_iter ( ) . map ( |pat| pat_to_ty_pat ( cx,  pat. into_inner ( ) ) ) . collect ( ) , 
63+         ) , 
5064        ast:: PatKind :: Err ( guar)  => TyPatKind :: Err ( guar) , 
5165        _ => TyPatKind :: Err ( cx. dcx ( ) . span_err ( pat. span ,  "pattern not supported in pattern types" ) ) , 
5266    } ; 
0 commit comments