diff options
| author | Jeffrey Seyfried <jeffrey.seyfried@gmail.com> | 2016-07-11 20:00:07 +0000 |
|---|---|---|
| committer | Jeffrey Seyfried <jeffrey.seyfried@gmail.com> | 2016-07-11 22:25:08 +0000 |
| commit | 060b5c5ef273a6b74ccbd10c1d4a1debfa27d9de (patch) | |
| tree | 63c0862d64c7c01fe52a02099e816f644e11aa02 /src/libsyntax/parse | |
| parent | 752d4419a060e007548cf56f85ff864a13589567 (diff) | |
| download | rust-060b5c5ef273a6b74ccbd10c1d4a1debfa27d9de.tar.gz rust-060b5c5ef273a6b74ccbd10c1d4a1debfa27d9de.zip | |
Factor the `RefCell` out of the `Interner`.
Diffstat (limited to 'src/libsyntax/parse')
| -rw-r--r-- | src/libsyntax/parse/token.rs | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/libsyntax/parse/token.rs b/src/libsyntax/parse/token.rs index c3908118284..ab7ed223bb3 100644 --- a/src/libsyntax/parse/token.rs +++ b/src/libsyntax/parse/token.rs @@ -21,6 +21,7 @@ use util::interner::Interner; use tokenstream; use serialize::{Decodable, Decoder, Encodable, Encoder}; +use std::cell::RefCell; use std::fmt; use std::ops::Deref; use std::rc::Rc; @@ -477,20 +478,20 @@ pub type IdentInterner = Interner; // if an interner exists in TLS, return it. Otherwise, prepare a // fresh one. // FIXME(eddyb) #8726 This should probably use a thread-local reference. -pub fn with_ident_interner<T, F: FnOnce(&IdentInterner) -> T>(f: F) -> T { - thread_local!(static KEY: IdentInterner = { - mk_fresh_ident_interner() +pub fn with_ident_interner<T, F: FnOnce(&mut IdentInterner) -> T>(f: F) -> T { + thread_local!(static KEY: RefCell<IdentInterner> = { + RefCell::new(mk_fresh_ident_interner()) }); - KEY.with(f) + KEY.with(|interner| f(&mut *interner.borrow_mut())) } /// Reset the ident interner to its initial state. pub fn reset_ident_interner() { - with_ident_interner(|interner| interner.reset(mk_fresh_ident_interner())); + with_ident_interner(|interner| *interner = mk_fresh_ident_interner()); } pub fn clear_ident_interner() { - with_ident_interner(|interner| interner.clear()); + with_ident_interner(|interner| *interner = IdentInterner::new()); } /// Represents a string stored in the thread-local interner. Because the |
