fix: Fix block defmap not looking into tail expressions for macro calls

This commit is contained in:
Lukas Wirth 2023-03-08 14:37:27 +01:00
parent b6e7cf3201
commit d038892947
2 changed files with 29 additions and 0 deletions

View File

@ -395,3 +395,25 @@ fn foo() {
"#]],
)
}
#[test]
fn trailing_expr_macro_expands_stmts() {
check_at(
r#"
macro_rules! foo {
() => { const FOO: u32 = 0;const BAR: u32 = 0; };
}
fn f() {$0
foo!{}
};
"#,
expect![[r#"
block scope
BAR: v
FOO: v
crate
f: v
"#]],
)
}

View File

@ -90,6 +90,13 @@ pub(super) fn lower_block(mut self, block: &ast::BlockExpr) -> ItemTree {
_ => None,
})
.collect();
if let Some(ast::Expr::MacroExpr(expr)) = block.tail_expr() {
if let Some(call) = expr.macro_call() {
if let Some(mod_item) = self.lower_mod_item(&call.into()) {
self.tree.top_level.push(mod_item);
}
}
}
self.tree
}