@@ -26,23 +26,33 @@ fn parse_pat_ty<'a>(cx: &mut ExtCtxt<'a>, stream: TokenStream) -> PResult<'a, (P
2626
2727 let ty = parser. parse_ty ( ) ?;
2828 parser. expect_keyword ( exp ! ( Is ) ) ?;
29+
30+ let start = parser. token . span ;
2931 let pat = parser. parse_pat_no_top_alt ( None , None ) ?. into_inner ( ) ;
32+ let kind = pat_to_ty_pat ( cx, pat) ;
33+
34+ let span = start. to ( parser. token . span ) ;
35+ let pat = ty_pat ( kind, span) ;
36+
37+ if parser. token != token:: Eof {
38+ parser. unexpected ( ) ?;
39+ }
40+
41+ Ok ( ( ty, pat) )
42+ }
3043
31- let kind = match pat. kind {
44+ fn ty_pat ( kind : TyPatKind , span : Span ) -> P < TyPat > {
45+ P ( TyPat { id : DUMMY_NODE_ID , kind, span, tokens : None } )
46+ }
47+
48+ fn pat_to_ty_pat ( cx : & mut ExtCtxt < ' _ > , pat : ast:: Pat ) -> TyPatKind {
49+ match pat. kind {
3250 ast:: PatKind :: Range ( start, end, include_end) => TyPatKind :: Range (
3351 start. map ( |value| P ( AnonConst { id : DUMMY_NODE_ID , value } ) ) ,
3452 end. map ( |value| P ( AnonConst { id : DUMMY_NODE_ID , value } ) ) ,
3553 include_end,
3654 ) ,
3755 ast:: PatKind :: Err ( guar) => TyPatKind :: Err ( guar) ,
3856 _ => TyPatKind :: Err ( cx. dcx ( ) . span_err ( pat. span , "pattern not supported in pattern types" ) ) ,
39- } ;
40-
41- let pat = P ( TyPat { id : pat. id , kind, span : pat. span , tokens : pat. tokens } ) ;
42-
43- if parser. token != token:: Eof {
44- parser. unexpected ( ) ?;
4557 }
46-
47- Ok ( ( ty, pat) )
4858}
0 commit comments