11use rustc_ast:: ptr:: P ;
22use rustc_ast:: tokenstream:: TokenStream ;
3- use rustc_ast:: { AnonConst , DUMMY_NODE_ID , Ty , TyPat , TyPatKind , ast} ;
3+ 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;
@@ -26,19 +26,31 @@ 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- let pat = parser. parse_pat_no_top_alt ( None , None ) ?. into_inner ( ) ;
3029
31- let kind = match pat. kind {
32- ast:: PatKind :: Range ( start, end, include_end) => TyPatKind :: Range (
33- start. map ( |value| P ( AnonConst { id : DUMMY_NODE_ID , value } ) ) ,
34- end. map ( |value| P ( AnonConst { id : DUMMY_NODE_ID , value } ) ) ,
35- include_end,
36- ) ,
37- ast:: PatKind :: Err ( guar) => TyPatKind :: Err ( guar) ,
38- _ => TyPatKind :: Err ( cx. dcx ( ) . span_err ( pat. span , "pattern not supported in pattern types" ) ) ,
30+ let start = parser. token . span ;
31+ let kind = if parser. eat ( exp ! ( Not ) ) {
32+ parser. expect_keyword ( exp ! ( Null ) ) ?;
33+ TyPatKind :: NotNull
34+ } else {
35+ let pat = parser. parse_pat_no_top_alt ( None , None ) ?. into_inner ( ) ;
36+ match pat. kind {
37+ ast:: PatKind :: Range ( start, end, include_end) => TyPatKind :: Range (
38+ start. map ( |value| P ( AnonConst { id : DUMMY_NODE_ID , value } ) ) ,
39+ end. map ( |value| P ( AnonConst { id : DUMMY_NODE_ID , value } ) ) ,
40+ include_end,
41+ ) ,
42+ ast:: PatKind :: Err ( guar) => TyPatKind :: Err ( guar) ,
43+ _ => TyPatKind :: Err (
44+ cx. dcx ( ) . span_err ( pat. span , "pattern not supported in pattern types" ) ,
45+ ) ,
46+ }
3947 } ;
4048
41- let pat = P ( TyPat { id : pat. id , kind, span : pat. span , tokens : pat. tokens } ) ;
49+ let span = start. to ( parser. token . span ) ;
50+ let pat = P ( TyPat { id : DUMMY_NODE_ID , kind, span, tokens : None } ) ;
4251
52+ if parser. token != token:: Eof {
53+ parser. unexpected ( ) ?;
54+ }
4355 Ok ( ( ty, pat) )
4456}
0 commit comments