diff options
| author | Oli Scherer <github333195615777966@oli-obk.de> | 2025-02-27 09:46:46 +0000 |
|---|---|---|
| committer | Oli Scherer <github333195615777966@oli-obk.de> | 2025-04-28 07:36:59 +0000 |
| commit | 6338e364f007a0fe4b0bf7dfb425000890336d8a (patch) | |
| tree | 6f6d52df56ed667e2fda352d90c164e406ac64f2 | |
| parent | 96918a4bd574539974e05985c1c53cbcf0c69b50 (diff) | |
| download | rust-6338e364f007a0fe4b0bf7dfb425000890336d8a.tar.gz rust-6338e364f007a0fe4b0bf7dfb425000890336d8a.zip | |
Pull ast pattern type parsing out into a separate function
| -rw-r--r-- | compiler/rustc_builtin_macros/src/pattern_type.rs | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/compiler/rustc_builtin_macros/src/pattern_type.rs b/compiler/rustc_builtin_macros/src/pattern_type.rs index a0b84c4ccf5..e9d66693912 100644 --- a/compiler/rustc_builtin_macros/src/pattern_type.rs +++ b/compiler/rustc_builtin_macros/src/pattern_type.rs @@ -26,9 +26,27 @@ fn parse_pat_ty<'a>(cx: &mut ExtCtxt<'a>, stream: TokenStream) -> PResult<'a, (P let ty = parser.parse_ty()?; parser.expect_keyword(exp!(Is))?; + + let start = parser.token.span; let pat = parser.parse_pat_no_top_alt(None, None)?.into_inner(); + let kind = pat_to_ty_pat(cx, pat); + + let span = start.to(parser.token.span); + let pat = ty_pat(kind, span); + + if parser.token != token::Eof { + parser.unexpected()?; + } + + Ok((ty, pat)) +} - let kind = match pat.kind { +fn ty_pat(kind: TyPatKind, span: Span) -> P<TyPat> { + P(TyPat { id: DUMMY_NODE_ID, kind, span, tokens: None }) +} + +fn pat_to_ty_pat(cx: &mut ExtCtxt<'_>, pat: ast::Pat) -> TyPatKind { + match pat.kind { ast::PatKind::Range(start, end, include_end) => TyPatKind::Range( start.map(|value| P(AnonConst { id: DUMMY_NODE_ID, value })), end.map(|value| P(AnonConst { id: DUMMY_NODE_ID, value })), @@ -36,13 +54,5 @@ fn parse_pat_ty<'a>(cx: &mut ExtCtxt<'a>, stream: TokenStream) -> PResult<'a, (P ), ast::PatKind::Err(guar) => TyPatKind::Err(guar), _ => TyPatKind::Err(cx.dcx().span_err(pat.span, "pattern not supported in pattern types")), - }; - - let pat = P(TyPat { id: pat.id, kind, span: pat.span, tokens: pat.tokens }); - - if parser.token != token::Eof { - parser.unexpected()?; } - - Ok((ty, pat)) } |
