diff options
| author | David Tolnay <dtolnay@gmail.com> | 2023-10-25 13:46:59 -0700 |
|---|---|---|
| committer | David Tolnay <dtolnay@gmail.com> | 2023-10-26 01:57:12 -0700 |
| commit | 1078250f483ded63e4526ff379813ab367e2a6c7 (patch) | |
| tree | 5dedbcf8f382bf79cdd740e223dee1fbd6427d7c | |
| parent | 65f025333427a881a3fa651a6fefcfa7f6a79354 (diff) | |
| download | rust-1078250f483ded63e4526ff379813ab367e2a6c7.tar.gz rust-1078250f483ded63e4526ff379813ab367e2a6c7.zip | |
Continue generating other symbols if an expr is not supported
| -rw-r--r-- | compiler/rustc_macros/src/symbols.rs | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/compiler/rustc_macros/src/symbols.rs b/compiler/rustc_macros/src/symbols.rs index fd2d56eb29c..b808b858357 100644 --- a/compiler/rustc_macros/src/symbols.rs +++ b/compiler/rustc_macros/src/symbols.rs @@ -60,6 +60,7 @@ enum Value { SameAsName, String(LitStr), Env(LitStr), + Unsupported(Expr), } impl Parse for Symbol { @@ -88,13 +89,7 @@ impl Parse for Value { } _ => {} } - Err(syn::Error::new_spanned( - expr, - concat!( - "unsupported expression for symbol value; implement support for this in ", - file!(), - ), - )) + Ok(Value::Unsupported(expr)) } } @@ -223,7 +218,17 @@ fn symbols_with_errors(input: TokenStream) -> (TokenStream, Vec<syn::Error>) { let value = match &symbol.value { Value::SameAsName => name.to_string(), Value::String(lit) => lit.value(), - Value::Env(_) => continue, + Value::Env(_) => continue, // in another loop below + Value::Unsupported(expr) => { + errors.list.push(syn::Error::new_spanned( + expr, + concat!( + "unsupported expression for symbol value; implement support for this in ", + file!(), + ), + )); + continue; + } }; let idx = entries.insert(symbol.name.span(), &value, &mut errors); @@ -249,7 +254,7 @@ fn symbols_with_errors(input: TokenStream) -> (TokenStream, Vec<syn::Error>) { for symbol in &input.symbols { let env_var = match &symbol.value { Value::Env(lit) => lit, - _ => continue, + Value::SameAsName | Value::String(_) | Value::Unsupported(_) => continue, }; let value = match proc_macro::tracked_env::var(env_var.value()) { |
