From ba17934bc1f6fce2e4f9e5494efdb90508eafecd Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Wed, 25 Oct 2023 11:12:32 -0700 Subject: [PATCH] Represent symbol value as enum to prepare for supporting env vars --- compiler/rustc_macros/src/symbols.rs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/compiler/rustc_macros/src/symbols.rs b/compiler/rustc_macros/src/symbols.rs index 46ae1779bbe4..4df7eb631049 100644 --- a/compiler/rustc_macros/src/symbols.rs +++ b/compiler/rustc_macros/src/symbols.rs @@ -53,14 +53,20 @@ impl Parse for Keyword { struct Symbol { name: Ident, - value: Option, + value: Value, +} + +enum Value { + SameAsName, + String(LitStr), } impl Parse for Symbol { fn parse(input: ParseStream<'_>) -> Result { let name = input.parse()?; let colon_token: Option = input.parse()?; - let value = if colon_token.is_some() { Some(input.parse()?) } else { None }; + let value = + if colon_token.is_some() { Value::String(input.parse()?) } else { Value::SameAsName }; Ok(Symbol { name, value }) } @@ -168,8 +174,8 @@ fn symbols_with_errors(input: TokenStream) -> (TokenStream, Vec) { for symbol in input.symbols.iter() { let name = &symbol.name; let value = match &symbol.value { - Some(value) => value.value(), - None => name.to_string(), + Value::SameAsName => name.to_string(), + Value::String(lit) => lit.value(), }; check_dup(symbol.name.span(), &value, &mut errors); check_order(symbol.name.span(), &name.to_string(), &mut errors);