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 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,