]> git.lizzy.rs Git - rust.git/blobdiff - crates/parser/src/grammar.rs
Allow macros to expand to or-patterns
[rust.git] / crates / parser / src / grammar.rs
index b704242065c634d52736e067ad3937a745281491..4efbf9a606e1939bcdcd96398465e7cd1f201b5d 100644 (file)
@@ -98,11 +98,6 @@ 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::Semicolon::Optional);
             }
 
@@ -114,6 +109,58 @@ 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_top(p);
+            if p.at(EOF) {
+                m.abandon(p);
+                return;
+            }
+            while !p.at(EOF) {
+                p.bump_any();
+            }
+            m.complete(p, ERROR);
+        }
+
+        pub(crate) fn type_(p: &mut Parser) {
+            let m = p.start();
+            types::type_(p);
+            if p.at(EOF) {
+                m.abandon(p);
+                return;
+            }
+            while !p.at(EOF) {
+                p.bump_any();
+            }
+            m.complete(p, ERROR);
+        }
+
+        pub(crate) fn expr(p: &mut Parser) {
+            let m = p.start();
+            expressions::expr(p);
+            if p.at(EOF) {
+                m.abandon(p);
+                return;
+            }
+            while !p.at(EOF) {
+                p.bump_any();
+            }
+            m.complete(p, ERROR);
+        }
+
+        pub(crate) fn meta_item(p: &mut Parser) {
+            let m = p.start();
+            attributes::meta(p);
+            if p.at(EOF) {
+                m.abandon(p);
+                return;
+            }
+            while !p.at(EOF) {
+                p.bump_any();
+            }
+            m.complete(p, ERROR);
+        }
     }
 }