Skip to content

Commit 752d441

Browse files
committed
Refactor get_ident_interner -> with_ident_interner.
1 parent 70e2845 commit 752d441

File tree

4 files changed

+19
-19
lines changed

4 files changed

+19
-19
lines changed

src/librustc_driver/driver.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ pub fn compile_input(sess: &Session,
211211
}
212212

213213
// Discard interned strings as they are no longer required.
214-
token::get_ident_interner().clear();
214+
token::clear_ident_interner();
215215

216216
Ok((outputs, trans))
217217
})??
@@ -480,7 +480,7 @@ pub fn phase_1_parse_input<'a>(sess: &'a Session,
480480
input: &Input)
481481
-> PResult<'a, ast::Crate> {
482482
// These may be left in an incoherent state after a previous compile.
483-
// `clear_tables` and `get_ident_interner().clear()` can be used to free
483+
// `clear_tables` and `clear_ident_interner` can be used to free
484484
// memory, but they do not restore the initial state.
485485
syntax::ext::mtwt::reset_tables();
486486
token::reset_ident_interner();

src/librustc_metadata/decoder.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,7 @@ pub fn get_adt_def<'a, 'tcx>(cdata: Cmd,
442442
struct_field_family_to_visibility(ff))
443443
}).chain(reader::tagged_docs(doc, tag_item_unnamed_field).map(|f| {
444444
let ff = item_family(f);
445-
let name = token::get_ident_interner().intern(index.to_string());
445+
let name = token::with_ident_interner(|interner| interner.intern(index.to_string()));
446446
index += 1;
447447
ty::FieldDefData::new(item_def_id(f, cdata), name,
448448
struct_field_family_to_visibility(ff))
@@ -1147,7 +1147,7 @@ pub fn get_struct_field_names(cdata: Cmd, id: DefIndex) -> Vec<ast::Name> {
11471147
reader::tagged_docs(item, tag_item_field).map(|an_item| {
11481148
item_name(an_item)
11491149
}).chain(reader::tagged_docs(item, tag_item_unnamed_field).map(|_| {
1150-
let name = token::get_ident_interner().intern(index.to_string());
1150+
let name = token::with_ident_interner(|interner| interner.intern(index.to_string()));
11511151
index += 1;
11521152
name
11531153
})).collect()

src/librustc_trans/trans_item.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ use rustc::ty::subst;
3131
use std::hash::{Hash, Hasher};
3232
use syntax::ast::{self, NodeId};
3333
use syntax::{attr,errors};
34-
use syntax::parse::token;
3534
use type_of;
3635
use glue;
3736
use abi::{Abi, FnType};
@@ -562,8 +561,8 @@ fn push_type_params<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
562561

563562
for projection in projections {
564563
let projection = projection.skip_binder();
565-
let name = token::get_ident_interner().get(projection.projection_ty.item_name);
566-
output.push_str(&name[..]);
564+
let name = &projection.projection_ty.item_name.as_str();
565+
output.push_str(name);
567566
output.push_str("=");
568567
push_unique_type_name(tcx, projection.ty, output);
569568
output.push_str(", ");

src/libsyntax/parse/token.rs

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -477,17 +477,20 @@ pub type IdentInterner = Interner;
477477
// if an interner exists in TLS, return it. Otherwise, prepare a
478478
// fresh one.
479479
// FIXME(eddyb) #8726 This should probably use a thread-local reference.
480-
pub fn get_ident_interner() -> Rc<IdentInterner> {
481-
thread_local!(static KEY: Rc<::parse::token::IdentInterner> = {
482-
Rc::new(mk_fresh_ident_interner())
480+
pub fn with_ident_interner<T, F: FnOnce(&IdentInterner) -> T>(f: F) -> T {
481+
thread_local!(static KEY: IdentInterner = {
482+
mk_fresh_ident_interner()
483483
});
484-
KEY.with(|k| k.clone())
484+
KEY.with(f)
485485
}
486486

487487
/// Reset the ident interner to its initial state.
488488
pub fn reset_ident_interner() {
489-
let interner = get_ident_interner();
490-
interner.reset(mk_fresh_ident_interner());
489+
with_ident_interner(|interner| interner.reset(mk_fresh_ident_interner()));
490+
}
491+
492+
pub fn clear_ident_interner() {
493+
with_ident_interner(|interner| interner.clear());
491494
}
492495

493496
/// Represents a string stored in the thread-local interner. Because the
@@ -521,8 +524,7 @@ impl InternedString {
521524

522525
#[inline]
523526
pub fn new_from_name(name: ast::Name) -> InternedString {
524-
let interner = get_ident_interner();
525-
InternedString::new_from_rc_str(interner.get(name))
527+
with_ident_interner(|interner| InternedString::new_from_rc_str(interner.get(name)))
526528
}
527529
}
528530

@@ -610,13 +612,13 @@ pub fn intern_and_get_ident(s: &str) -> InternedString {
610612
/// Maps a string to its interned representation.
611613
#[inline]
612614
pub fn intern(s: &str) -> ast::Name {
613-
get_ident_interner().intern(s)
615+
with_ident_interner(|interner| interner.intern(s))
614616
}
615617

616618
/// gensym's a new usize, using the current interner.
617619
#[inline]
618620
pub fn gensym(s: &str) -> ast::Name {
619-
get_ident_interner().gensym(s)
621+
with_ident_interner(|interner| interner.gensym(s))
620622
}
621623

622624
/// Maps a string to an identifier with an empty syntax context.
@@ -635,8 +637,7 @@ pub fn gensym_ident(s: &str) -> ast::Ident {
635637
// note that this guarantees that str_ptr_eq(ident_to_string(src),interner_get(fresh_name(src)));
636638
// that is, that the new name and the old one are connected to ptr_eq strings.
637639
pub fn fresh_name(src: ast::Ident) -> ast::Name {
638-
let interner = get_ident_interner();
639-
interner.gensym_copy(src.name)
640+
with_ident_interner(|interner| interner.gensym_copy(src.name))
640641
// following: debug version. Could work in final except that it's incompatible with
641642
// good error messages and uses of struct names in ambiguous could-be-binding
642643
// locations. Also definitely destroys the guarantee given above about ptr_eq.

0 commit comments

Comments
 (0)