getting rid of interner_key! macro

This commit is contained in:
John Clements 2013-05-07 12:34:52 -07:00
parent fc4f304ef9
commit 999f692645
9 changed files with 60 additions and 125 deletions

View file

@ -786,7 +786,7 @@ mod test {
fn setup(teststr: ~str) -> Env {
let cm = CodeMap::new();
let fm = cm.new_filemap(~"zebra.rs", @teststr);
let ident_interner = token::mk_ident_interner(); // interner::mk();
let ident_interner = token::get_ident_interner();
let span_handler =
diagnostic::mk_span_handler(diagnostic::mk_handler(None),@cm);
Env {

View file

@ -19,7 +19,7 @@ use diagnostic::{span_handler, mk_span_handler, mk_handler, Emitter};
use parse::attr::parser_attr;
use parse::lexer::reader;
use parse::parser::Parser;
use parse::token::{ident_interner, mk_ident_interner};
use parse::token::{ident_interner, get_ident_interner};
use core::io;
use core::option::{None, Option, Some};
@ -59,7 +59,7 @@ pub fn new_parse_sess(demitter: Option<Emitter>) -> @mut ParseSess {
cm: cm,
next_id: 1,
span_diagnostic: mk_span_handler(mk_handler(demitter), cm),
interner: mk_ident_interner(),
interner: get_ident_interner(),
}
}
@ -70,7 +70,7 @@ pub fn new_parse_sess_special_handler(sh: @span_handler,
cm: cm,
next_id: 1,
span_diagnostic: sh,
interner: mk_ident_interner(),
interner: get_ident_interner(),
}
}
@ -352,8 +352,8 @@ mod test {
use opt_vec;
use ast;
use abi;
use ast_util::new_ident;
use parse::parser::Parser;
use parse::token::intern;
use util::parser_testing::{string_to_tts_and_sess,string_to_parser};
use util::parser_testing::{string_to_expr, string_to_item};
use util::parser_testing::{string_to_stmt};
@ -378,8 +378,8 @@ mod test {
}
// convert a vector of uints to a vector of ast::idents
fn ints_to_idents(ids: ~[uint]) -> ~[ast::ident] {
ids.map(|u| new_ident(*u))
fn ints_to_idents(ids: ~[~str]) -> ~[ast::ident] {
ids.map(|u| intern(*u))
}
#[test] fn path_exprs_1 () {
@ -388,7 +388,7 @@ mod test {
callee_id:2,
node:ast::expr_path(@ast::Path {span:sp(0,1),
global:false,
idents:~[new_ident(100)],
idents:~[intern("a")],
rp:None,
types:~[]}),
span:sp(0,1)})
@ -398,11 +398,12 @@ mod test {
assert_eq!(string_to_expr(@~"::a::b"),
@ast::expr{id:1,
callee_id:2,
node:ast::expr_path(@ast::Path {span:sp(0,6),
global:true,
idents:ints_to_idents(~[100,101]),
rp:None,
types:~[]}),
node:ast::expr_path(
@ast::Path {span:sp(0,6),
global:true,
idents:ints_to_idents(~[~"a",~"b"]),
rp:None,
types:~[]}),
span:sp(0,6)})
}
@ -451,7 +452,7 @@ mod test {
node:ast::expr_path(
@ast::Path{span:sp(7,8),
global:false,
idents:~[new_ident(103)],
idents:~[intern("d")],
rp:None,
types:~[]
}),
@ -469,7 +470,7 @@ mod test {
@ast::Path{
span:sp(0,1),
global:false,
idents:~[new_ident(101)],
idents:~[intern("b")],
rp:None,
types: ~[]}),
span: sp(0,1)},
@ -490,7 +491,7 @@ mod test {
@ast::Path{
span:sp(0,1),
global:false,
idents:~[new_ident(101)],
idents:~[intern("b")],
rp: None,
types: ~[]},
None // no idea
@ -509,7 +510,7 @@ mod test {
span:sp(4,4), // this is bizarre...
// check this in the original parser?
global:false,
idents:~[new_ident(105)],
idents:~[intern("int")],
rp: None,
types: ~[]},
2),
@ -519,7 +520,7 @@ mod test {
@ast::Path{
span:sp(0,1),
global:false,
idents:~[new_ident(101)],
idents:~[intern("b")],
rp: None,
types: ~[]},
None // no idea
@ -535,7 +536,7 @@ mod test {
// assignment order of the node_ids.
assert_eq!(string_to_item(@~"fn a (b : int) { b; }"),
Some(
@ast::item{ident:new_ident(100),
@ast::item{ident:intern("a"),
attrs:~[],
id: 10, // fixme
node: ast::item_fn(ast::fn_decl{
@ -545,7 +546,7 @@ mod test {
node: ast::ty_path(@ast::Path{
span:sp(10,13),
global:false,
idents:~[new_ident(106)],
idents:~[intern("int")],
rp: None,
types: ~[]},
2),
@ -556,7 +557,7 @@ mod test {
@ast::Path{
span:sp(6,7),
global:false,
idents:~[new_ident(101)],
idents:~[intern("b")],
rp: None,
types: ~[]},
None // no idea
@ -587,7 +588,7 @@ mod test {
@ast::Path{
span:sp(17,18),
global:false,
idents:~[new_ident(101)],
idents:~[intern("b")],
rp:None,
types: ~[]}),
span: sp(17,18)},

View file

@ -411,8 +411,7 @@ pub impl ident_interner {
}
// return a fresh interner, preloaded with special identifiers.
// EFFECT: stores this interner in TLS
pub fn mk_fresh_ident_interner() -> @ident_interner {
fn mk_fresh_ident_interner() -> @ident_interner {
// the indices here must correspond to the numbers in
// special_idents.
let init_vec = ~[
@ -453,23 +452,27 @@ pub fn mk_fresh_ident_interner() -> @ident_interner {
"Self", // 34
];
let rv = @ident_interner {
@ident_interner {
interner: interner::StrInterner::prefill(init_vec)
};
unsafe {
local_data::local_data_set(interner_key!(), @rv);
}
rv
}
// if an interner exists in TLS, return it. Otherwise, prepare a
// fresh one.
pub fn mk_ident_interner() -> @ident_interner {
pub fn get_ident_interner() -> @ident_interner {
unsafe {
match local_data::local_data_get(interner_key!()) {
let key =
(cast::transmute::<(uint, uint),
&fn(v: @@::parse::token::ident_interner)>(
(-3 as uint, 0u)));
match local_data::local_data_get(key) {
Some(interner) => *interner,
None => {
mk_fresh_ident_interner()
let interner = mk_fresh_ident_interner();
unsafe {
local_data::local_data_set(key, @interner);
}
interner
}
}
}
@ -481,6 +484,12 @@ pub fn mk_fake_ident_interner() -> @ident_interner {
@ident_interner { interner: interner::StrInterner::new() }
}
// maps a string to its interned representation
pub fn intern(str : &str) -> ast::ident {
let interner = get_ident_interner();
interner.intern(str)
}
/**
* All the valid words that have meaning in the Rust language.
*