Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/proc-macro-srv/src/server/symbol.rs')
-rw-r--r--crates/proc-macro-srv/src/server/symbol.rs16
1 files changed, 9 insertions, 7 deletions
diff --git a/crates/proc-macro-srv/src/server/symbol.rs b/crates/proc-macro-srv/src/server/symbol.rs
index 99f8b1efaa..540d06457f 100644
--- a/crates/proc-macro-srv/src/server/symbol.rs
+++ b/crates/proc-macro-srv/src/server/symbol.rs
@@ -1,28 +1,30 @@
//! Symbol interner for proc-macro-srv
-use std::{cell::RefCell, collections::HashMap};
+use std::{cell::RefCell, collections::HashMap, thread::LocalKey};
use tt::SmolStr;
thread_local! {
- static SYMBOL_INTERNER: RefCell<SymbolInterner> = Default::default();
+ pub(crate) static SYMBOL_INTERNER: RefCell<SymbolInterner> = Default::default();
}
// ID for an interned symbol.
#[derive(Hash, Eq, PartialEq, Copy, Clone)]
pub struct Symbol(u32);
+pub(crate) type SymbolInternerRef = &'static LocalKey<RefCell<SymbolInterner>>;
+
impl Symbol {
- pub(super) fn intern(data: &str) -> Symbol {
- SYMBOL_INTERNER.with(|i| i.borrow_mut().intern(data))
+ pub(super) fn intern(interner: SymbolInternerRef, data: &str) -> Symbol {
+ interner.with(|i| i.borrow_mut().intern(data))
}
- pub(super) fn text(&self) -> SmolStr {
- SYMBOL_INTERNER.with(|i| i.borrow().get(self).clone())
+ pub(super) fn text(&self, interner: SymbolInternerRef) -> SmolStr {
+ interner.with(|i| i.borrow().get(self).clone())
}
}
#[derive(Default)]
-struct SymbolInterner {
+pub(crate) struct SymbolInterner {
idents: HashMap<SmolStr, u32>,
ident_data: Vec<SmolStr>,
}