about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--crates/mbe/src/expander/matcher.rs6
-rw-r--r--crates/parser/src/grammar.rs6
-rw-r--r--crates/parser/src/lib.rs4
3 files changed, 12 insertions, 4 deletions
diff --git a/crates/mbe/src/expander/matcher.rs b/crates/mbe/src/expander/matcher.rs
index 03ada8b2b9c..c5c13590dd1 100644
--- a/crates/mbe/src/expander/matcher.rs
+++ b/crates/mbe/src/expander/matcher.rs
@@ -692,7 +692,11 @@ fn match_meta_var(kind: &str, input: &mut TtIter) -> ExpandResult<Option<Fragmen
     let fragment = match kind {
         "path" => ParserEntryPoint::Path,
         "expr" => ParserEntryPoint::Expr,
-        "ty" => ParserEntryPoint::Type,
+        "ty" => {
+            return input
+                .expect_fragment2(parser::PrefixEntryPoint::Ty)
+                .map(|tt| tt.map(Fragment::Tokens));
+        }
         // FIXME: These two should actually behave differently depending on the edition.
         //
         // https://doc.rust-lang.org/edition-guide/rust-2021/or-patterns-macro-rules.html
diff --git a/crates/parser/src/grammar.rs b/crates/parser/src/grammar.rs
index 4c6106f18a8..539dc19b517 100644
--- a/crates/parser/src/grammar.rs
+++ b/crates/parser/src/grammar.rs
@@ -65,6 +65,10 @@ pub(crate) mod entry {
         pub(crate) fn pat(p: &mut Parser) {
             patterns::pattern_single(p);
         }
+
+        pub(crate) fn ty(p: &mut Parser) {
+            types::type_(p);
+        }
     }
 }
 
@@ -80,8 +84,6 @@ pub(crate) mod entry_points {
 
     pub(crate) use paths::type_path as path;
 
-    pub(crate) use types::type_;
-
     pub(crate) fn expr(p: &mut Parser) {
         let _ = expressions::expr(p);
     }
diff --git a/crates/parser/src/lib.rs b/crates/parser/src/lib.rs
index a6e554c3b45..ebb060a5639 100644
--- a/crates/parser/src/lib.rs
+++ b/crates/parser/src/lib.rs
@@ -56,6 +56,7 @@ pub enum PrefixEntryPoint {
     Block,
     Stmt,
     Pat,
+    Ty,
 }
 
 impl PrefixEntryPoint {
@@ -65,6 +66,7 @@ impl PrefixEntryPoint {
             PrefixEntryPoint::Block => grammar::entry::prefix::block,
             PrefixEntryPoint::Stmt => grammar::entry::prefix::stmt,
             PrefixEntryPoint::Pat => grammar::entry::prefix::pat,
+            PrefixEntryPoint::Ty => grammar::entry::prefix::ty,
         };
         let mut p = parser::Parser::new(input);
         entry_point(&mut p);
@@ -110,7 +112,7 @@ pub fn parse(inp: &Input, entry_point: ParserEntryPoint) -> Output {
         ParserEntryPoint::SourceFile => grammar::entry_points::source_file,
         ParserEntryPoint::Path => grammar::entry_points::path,
         ParserEntryPoint::Expr => grammar::entry_points::expr,
-        ParserEntryPoint::Type => grammar::entry_points::type_,
+        ParserEntryPoint::Type => grammar::entry::prefix::ty,
         ParserEntryPoint::Pattern => grammar::entry::prefix::pat,
         ParserEntryPoint::Item => grammar::entry_points::item,
         ParserEntryPoint::MetaItem => grammar::entry_points::meta_item,