@@ -26,23 +26,33 @@ fn parse_pat_ty<'a>(cx: &mut ExtCtxt<'a>, stream: TokenStream) -> PResult<'a, (P
26
26
27
27
let ty = parser. parse_ty ( ) ?;
28
28
parser. expect_keyword ( exp ! ( Is ) ) ?;
29
+
30
+ let start = parser. token . span ;
29
31
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
+ }
30
43
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 {
32
50
ast:: PatKind :: Range ( start, end, include_end) => TyPatKind :: Range (
33
51
start. map ( |value| P ( AnonConst { id : DUMMY_NODE_ID , value } ) ) ,
34
52
end. map ( |value| P ( AnonConst { id : DUMMY_NODE_ID , value } ) ) ,
35
53
include_end,
36
54
) ,
37
55
ast:: PatKind :: Err ( guar) => TyPatKind :: Err ( guar) ,
38
56
_ => 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 ( ) ?;
45
57
}
46
-
47
- Ok ( ( ty, pat) )
48
58
}
0 commit comments