]> git.lizzy.rs Git - rust.git/blobdiff - crates/parser/src/grammar.rs
enforce parsing invariant for patterns
[rust.git] / crates / parser / src / grammar.rs
index 234e584eeb7193566032845a8cf5507cff646034..eee9a8c0cd5f099585859a900052bd3be5a85584 100644 (file)
@@ -59,7 +59,7 @@ pub(crate) fn block(p: &mut Parser) {
         }
 
         pub(crate) fn stmt(p: &mut Parser) {
-            expressions::stmt(p, expressions::StmtWithSemi::No);
+            expressions::stmt(p, expressions::Semicolon::Forbidden);
         }
 
         pub(crate) fn pat(p: &mut Parser) {
@@ -98,12 +98,7 @@ pub(crate) fn macro_stmts(p: &mut Parser) {
             let m = p.start();
 
             while !p.at(EOF) {
-                if p.at(T![;]) {
-                    p.bump(T![;]);
-                    continue;
-                }
-
-                expressions::stmt(p, expressions::StmtWithSemi::Optional);
+                expressions::stmt(p, expressions::Semicolon::Optional);
             }
 
             m.complete(p, MACRO_STMTS);
@@ -114,6 +109,19 @@ pub(crate) fn macro_items(p: &mut Parser) {
             items::mod_contents(p, false);
             m.complete(p, MACRO_ITEMS);
         }
+
+        pub(crate) fn pattern(p: &mut Parser) {
+            let m = p.start();
+            patterns::pattern_single(p);
+            if p.at(EOF) {
+                m.abandon(p);
+                return;
+            }
+            while !p.at(EOF) {
+                p.bump_any();
+            }
+            m.complete(p, ERROR);
+        }
     }
 }