Fixed nested eager macro bug

This commit is contained in:
Edwin Cheng 2021-01-03 17:56:59 +08:00
parent 895d97cfa0
commit 26b9c793f1
2 changed files with 52 additions and 0 deletions

View file

@ -218,6 +218,12 @@ fn eager_macro_recur(
}
};
// check if the whole original sytnax is replaced
// Note that SyntaxRewriter cannot replace the root node itself
if child.syntax() == &original {
return Ok(insert);
}
rewriter.replace(child.syntax(), &insert);
}

View file

@ -570,6 +570,52 @@ fn bar() -> u32 {0}
);
}
#[test]
fn infer_builtin_macros_include_str() {
check_types(
r#"
//- /main.rs
#[rustc_builtin_macro]
macro_rules! include_str {() => {}}
fn main() {
let a = include_str!("foo.rs");
a;
} //^ &str
//- /foo.rs
hello
"#,
);
}
#[test]
fn infer_builtin_macros_include_str_with_lazy_nested() {
check_types(
r#"
//- /main.rs
#[rustc_builtin_macro]
macro_rules! concat {() => {}}
#[rustc_builtin_macro]
macro_rules! include_str {() => {}}
macro_rules! m {
($x:expr) => {
concat!("foo", $x)
};
}
fn main() {
let a = include_str!(m!(".rs"));
a;
} //^ &str
//- /foo.rs
hello
"#,
);
}
#[test]
#[ignore]
fn include_accidentally_quadratic() {