@@ -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