hir-expand: fix compile_error! expansion not unquoting strings

This commit is contained in:
Jake Heinz 2022-11-20 08:48:27 +00:00
parent 38fa47fd79
commit 427b63b676
2 changed files with 8 additions and 11 deletions

View file

@ -163,7 +163,8 @@ macro_rules! compile_error {
} }
// This expands to nothing (since it's in item position), but emits an error. // This expands to nothing (since it's in item position), but emits an error.
compile_error!("error!"); compile_error!("error, with an escaped quote: \"");
compile_error!(r"this is a raw string");
"#, "#,
expect![[r##" expect![[r##"
#[rustc_builtin_macro] #[rustc_builtin_macro]
@ -172,7 +173,8 @@ macro_rules! compile_error {
($msg:expr,) => ({ /* compiler built-in */ }) ($msg:expr,) => ({ /* compiler built-in */ })
} }
/* error: error! */ /* error: error, with an escaped quote: " */
/* error: this is a raw string */
"##]], "##]],
); );
} }

View file

@ -379,15 +379,10 @@ fn compile_error_expand(
tt: &tt::Subtree, tt: &tt::Subtree,
) -> ExpandResult<ExpandedEager> { ) -> ExpandResult<ExpandedEager> {
let err = match &*tt.token_trees { let err = match &*tt.token_trees {
[tt::TokenTree::Leaf(tt::Leaf::Literal(it))] => { [tt::TokenTree::Leaf(tt::Leaf::Literal(it))] => match unquote_str(it) {
let text = it.text.as_str(); Some(unquoted) => ExpandError::Other(unquoted.into()),
if text.starts_with('"') && text.ends_with('"') { None => ExpandError::Other("`compile_error!` argument must be a string".into()),
// FIXME: does not handle raw strings },
ExpandError::Other(text[1..text.len() - 1].into())
} else {
ExpandError::Other("`compile_error!` argument must be a string".into())
}
}
_ => ExpandError::Other("`compile_error!` argument must be a string".into()), _ => ExpandError::Other("`compile_error!` argument must be a string".into()),
}; };