Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/intern/src/symbol/symbols.rs')
-rw-r--r--crates/intern/src/symbol/symbols.rs33
1 files changed, 27 insertions, 6 deletions
diff --git a/crates/intern/src/symbol/symbols.rs b/crates/intern/src/symbol/symbols.rs
index 66553a2661..be0de6c936 100644
--- a/crates/intern/src/symbol/symbols.rs
+++ b/crates/intern/src/symbol/symbols.rs
@@ -13,15 +13,35 @@ use crate::{
macro_rules! define_symbols {
(@WITH_NAME: $($alias:ident = $value:literal,)* @PLAIN: $($name:ident,)*) => {
- // Ideally we would be emitting `const` here, but then we no longer have stable addresses
- // which is what we are relying on for equality! In the future if consts can refer to
- // statics we should swap these for `const`s and have the string literal being pointed
- // to be statics to refer to such that their address is stable.
+ // We define symbols as both `const`s and `static`s because some const code requires const symbols,
+ // but code from before the transition relies on the lifetime of the predefined symbols and making them
+ // `const`s make it error (because now they're temporaries). In the future we probably should only
+ // use consts.
+
+ /// Predefined symbols as `const`s (instead of the default `static`s).
+ pub mod consts {
+ use super::{Symbol, TaggedArcPtr};
+
+ // The strings should be in `static`s so that symbol equality holds.
+ $(
+ pub const $name: Symbol = {
+ static SYMBOL_STR: &str = stringify!($name);
+ Symbol { repr: TaggedArcPtr::non_arc(&SYMBOL_STR) }
+ };
+ )*
+ $(
+ pub const $alias: Symbol = {
+ static SYMBOL_STR: &str = $value;
+ Symbol { repr: TaggedArcPtr::non_arc(&SYMBOL_STR) }
+ };
+ )*
+ }
+
$(
- pub static $name: Symbol = Symbol { repr: TaggedArcPtr::non_arc(&stringify!($name)) };
+ pub static $name: Symbol = consts::$name;
)*
$(
- pub static $alias: Symbol = Symbol { repr: TaggedArcPtr::non_arc(&$value) };
+ pub static $alias: Symbol = consts::$alias;
)*
@@ -428,6 +448,7 @@ define_symbols! {
rustc_layout_scalar_valid_range_start,
rustc_legacy_const_generics,
rustc_macro_transparency,
+ rustc_paren_sugar,
rustc_reallocator,
rustc_reservation_impl,
rustc_safe_intrinsic,