diff --git a/crates/mbe/src/expander/matcher.rs b/crates/mbe/src/expander/matcher.rs index c5c13590dd..6cc655786c 100644 --- a/crates/mbe/src/expander/matcher.rs +++ b/crates/mbe/src/expander/matcher.rs @@ -691,7 +691,11 @@ fn match_leaf(lhs: &tt::Leaf, src: &mut TtIter) -> Result<(), ExpandError> { fn match_meta_var(kind: &str, input: &mut TtIter) -> ExpandResult> { let fragment = match kind { "path" => ParserEntryPoint::Path, - "expr" => ParserEntryPoint::Expr, + "expr" => { + return input + .expect_fragment2(parser::PrefixEntryPoint::Expr) + .map(|tt| tt.map(Fragment::Expr)); + } "ty" => { return input .expect_fragment2(parser::PrefixEntryPoint::Ty) diff --git a/crates/parser/src/grammar.rs b/crates/parser/src/grammar.rs index 539dc19b51..6789c61f4b 100644 --- a/crates/parser/src/grammar.rs +++ b/crates/parser/src/grammar.rs @@ -69,6 +69,9 @@ pub(crate) mod entry { pub(crate) fn ty(p: &mut Parser) { types::type_(p); } + 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 ebb060a563..6aeed8a288 100644 --- a/crates/parser/src/lib.rs +++ b/crates/parser/src/lib.rs @@ -57,6 +57,7 @@ pub enum PrefixEntryPoint { Stmt, Pat, Ty, + Expr, } impl PrefixEntryPoint { @@ -67,6 +68,7 @@ impl PrefixEntryPoint { PrefixEntryPoint::Stmt => grammar::entry::prefix::stmt, PrefixEntryPoint::Pat => grammar::entry::prefix::pat, PrefixEntryPoint::Ty => grammar::entry::prefix::ty, + PrefixEntryPoint::Expr => grammar::entry::prefix::expr, }; let mut p = parser::Parser::new(input); entry_point(&mut p);