Skip to content
This repository was archived by the owner on May 28, 2025. It is now read-only.

Commit 6338e36

Browse files
committed
Pull ast pattern type parsing out into a separate function
1 parent 96918a4 commit 6338e36

File tree

1 file changed

+19
-9
lines changed

1 file changed

+19
-9
lines changed

compiler/rustc_builtin_macros/src/pattern_type.rs

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)