Unnamed repository; edit this file 'description' to name the repository.
-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 03ada8b2b9..c5c13590dd 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 4c6106f18a..539dc19b51 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 a6e554c3b4..ebb060a563 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,