getting rid of interner_key! macro
This commit is contained in:
parent
fc4f304ef9
commit
999f692645
9 changed files with 60 additions and 125 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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)},
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
*
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue