@@ -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 > (
@@ -33,7 +34,17 @@ fn parse_pat_ty<'a>(cx: &mut ExtCtxt<'a>, stream: TokenStream) -> PResult<'a, (P
3334 let span = start. to ( parser. token . span ) ;
3435 ty_pat ( TyPatKind :: NotNull , span)
3536 } else {
36- pat_to_ty_pat ( cx, parser. parse_pat_no_top_alt ( None , None ) ?. into_inner ( ) )
37+ pat_to_ty_pat (
38+ cx,
39+ parser
40+ . parse_pat_no_top_guard (
41+ None ,
42+ RecoverComma :: No ,
43+ RecoverColon :: No ,
44+ CommaRecoveryMode :: EitherTupleOrPipe ,
45+ ) ?
46+ . into_inner ( ) ,
47+ )
3748 } ;
3849
3950 if parser. token != token:: Eof {
@@ -53,6 +64,9 @@ fn pat_to_ty_pat(cx: &mut ExtCtxt<'_>, pat: ast::Pat) -> P<TyPat> {
5364 end. map ( |value| P ( AnonConst { id : DUMMY_NODE_ID , value } ) ) ,
5465 include_end,
5566 ) ,
67+ ast:: PatKind :: Or ( variants) => TyPatKind :: Or (
68+ variants. into_iter ( ) . map ( |pat| pat_to_ty_pat ( cx, pat. into_inner ( ) ) ) . collect ( ) ,
69+ ) ,
5670 ast:: PatKind :: Err ( guar) => TyPatKind :: Err ( guar) ,
5771 _ => TyPatKind :: Err ( cx. dcx ( ) . span_err ( pat. span , "pattern not supported in pattern types" ) ) ,
5872 } ;
0 commit comments