summaryrefslogtreecommitdiff
path: root/compiler/rustc_ast
diff options
context:
space:
mode:
authorOli Scherer <git-spam-no-reply9815368754983@oli-obk.de>2023-01-30 09:50:16 +0000
committerOli Scherer <git-spam-no-reply9815368754983@oli-obk.de>2024-04-08 11:54:22 +0000
commitfc27a91880f54bbf9c66fa545d508199e2c441bb (patch)
treebb5cc6c34bee8ec4ca6be06bcf5fc491bff3ee75 /compiler/rustc_ast
parent0e5f5207881066973486e6a480fa46cfa22947e9 (diff)
Add pattern types to ast
Diffstat (limited to 'compiler/rustc_ast')
-rw-r--r--compiler/rustc_ast/src/ast.rs3
-rw-r--r--compiler/rustc_ast/src/mut_visit.rs4
-rw-r--r--compiler/rustc_ast/src/visit.rs4
3 files changed, 11 insertions, 0 deletions
diff --git a/compiler/rustc_ast/src/ast.rs b/compiler/rustc_ast/src/ast.rs
index e29ef591bcb..ee4f458a16b 100644
--- a/compiler/rustc_ast/src/ast.rs
+++ b/compiler/rustc_ast/src/ast.rs
@@ -2152,6 +2152,9 @@ pub enum TyKind {
MacCall(P<MacCall>),
/// Placeholder for a `va_list`.
CVarArgs,
+ /// Pattern types like `u32 as 1..=`, which is the same as `NonZeroU32`,
+ /// just as part of the type system.
+ Pat(P<Ty>, P<Pat>),
/// Sometimes we need a dummy value when no error has occurred.
Dummy,
/// Placeholder for a kind that has failed to be defined.
diff --git a/compiler/rustc_ast/src/mut_visit.rs b/compiler/rustc_ast/src/mut_visit.rs
index 7337b969242..da57def263d 100644
--- a/compiler/rustc_ast/src/mut_visit.rs
+++ b/compiler/rustc_ast/src/mut_visit.rs
@@ -502,6 +502,10 @@ pub fn noop_visit_ty<T: MutVisitor>(ty: &mut P<Ty>, vis: &mut T) {
}
TyKind::Tup(tys) => visit_thin_vec(tys, |ty| vis.visit_ty(ty)),
TyKind::Paren(ty) => vis.visit_ty(ty),
+ TyKind::Pat(ty, pat) => {
+ vis.visit_ty(ty);
+ vis.visit_pat(pat);
+ }
TyKind::Path(qself, path) => {
vis.visit_qself(qself);
vis.visit_path(path);
diff --git a/compiler/rustc_ast/src/visit.rs b/compiler/rustc_ast/src/visit.rs
index 18986fb7504..9e9ae52962d 100644
--- a/compiler/rustc_ast/src/visit.rs
+++ b/compiler/rustc_ast/src/visit.rs
@@ -446,6 +446,10 @@ pub fn walk_ty<'a, V: Visitor<'a>>(visitor: &mut V, typ: &'a Ty) -> V::Result {
}
try_visit!(visitor.visit_path(path, typ.id));
}
+ TyKind::Pat(ty, pat) => {
+ try_visit!(visitor.visit_ty(ty));
+ try_visit!(visitor.visit_pat(pat));
+ }
TyKind::Array(ty, length) => {
try_visit!(visitor.visit_ty(ty));
try_visit!(visitor.visit_anon_const(length));