about summary refs log tree commit diff
path: root/crates/parser/src
diff options
context:
space:
mode:
authorRyo Yoshida <low.ryoshida@gmail.com>2023-04-16 02:30:59 +0900
committerRyo Yoshida <low.ryoshida@gmail.com>2023-04-16 04:28:37 +0900
commit83a93f4bd3cb07f19044b27d954df746e9fb809e (patch)
tree25c277a6bab7ad3b738965b99327af28075a7769 /crates/parser/src
parent89a1439de3691dc1696d81701b6a09affb3328dd (diff)
downloadrust-83a93f4bd3cb07f19044b27d954df746e9fb809e.tar.gz
rust-83a93f4bd3cb07f19044b27d954df746e9fb809e.zip
Parse inline const pattern in nested patterns
Diffstat (limited to 'crates/parser/src')
-rw-r--r--crates/parser/src/grammar/patterns.rs11
1 files changed, 10 insertions, 1 deletions
diff --git a/crates/parser/src/grammar/patterns.rs b/crates/parser/src/grammar/patterns.rs
index baa93aa083f..4801732101f 100644
--- a/crates/parser/src/grammar/patterns.rs
+++ b/crates/parser/src/grammar/patterns.rs
@@ -5,6 +5,7 @@ pub(super) const PATTERN_FIRST: TokenSet =
         T![box],
         T![ref],
         T![mut],
+        T![const],
         T!['('],
         T!['['],
         T![&],
@@ -17,7 +18,7 @@ const PAT_TOP_FIRST: TokenSet = PATTERN_FIRST.union(TokenSet::new(&[T![|]]));
 
 /// Set of possible tokens at the start of a range pattern's end bound.
 const RANGE_PAT_END_FIRST: TokenSet =
-    expressions::LITERAL_FIRST.union(paths::PATH_FIRST).union(TokenSet::new(&[T![-]]));
+    expressions::LITERAL_FIRST.union(paths::PATH_FIRST).union(TokenSet::new(&[T![-], T![const]]));
 
 pub(crate) fn pattern(p: &mut Parser<'_>) {
     pattern_r(p, PAT_RECOVERY_SET);
@@ -499,6 +500,14 @@ fn box_pat(p: &mut Parser<'_>) -> CompletedMarker {
 // fn main() {
 //     let const { 15 } = ();
 //     let const { foo(); bar() } = ();
+//
+//     match 42 {
+//         const { 0 } .. const { 1 } => (),
+//         .. const { 0 } => (),
+//         const { 2 } .. => (),
+//     }
+//
+//     let (const { () },) = ();
 // }
 fn const_block_pat(p: &mut Parser<'_>) -> CompletedMarker {
     assert!(p.at(T![const]));