hir_ty: cleanups and extend infinitely_recursive_macro_type test

This commit is contained in:
cynecx 2021-04-18 20:18:48 +02:00
parent 6ed2fd233b
commit f0507ab7c6
2 changed files with 14 additions and 8 deletions

View file

@ -296,9 +296,11 @@ impl<'a> TyLoweringContext<'a> {
}
}
TypeRef::Macro(macro_call) => {
let (expander, recursion_start) = match self.expander.borrow_mut() {
expander if expander.is_some() => (Some(expander), false),
mut expander => {
let (expander, recursion_start) = {
let mut expander = self.expander.borrow_mut();
if expander.is_some() {
(Some(expander), false)
} else {
if let Some(module_id) = self.resolver.module() {
*expander = Some(Expander::new(
self.db.upcast(),

View file

@ -1248,14 +1248,18 @@ fn macros_in_type_generics() {
fn infinitely_recursive_macro_type() {
check_infer(
r#"
struct Bar<T>(T);
struct Bar<T, X>(T, X);
macro_rules! Foo {
() => { Foo!() }
}
macro_rules! U32 {
() => { u32 }
}
type A = Foo!();
type B = Bar<Foo!()>;
type B = Bar<Foo!(), U32!()>;
fn main() {
let a: A;
@ -1263,9 +1267,9 @@ fn infinitely_recursive_macro_type() {
}
"#,
expect![[r#"
112..143 '{ ...: B; }': ()
122..123 'a': {unknown}
136..137 'b': Bar<{unknown}>
166..197 '{ ...: B; }': ()
176..177 'a': {unknown}
190..191 'b': Bar<{unknown}, u32>
"#]],
);
}