diff options
| author | bors <bors@rust-lang.org> | 2013-05-10 01:55:54 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2013-05-10 01:55:54 -0700 |
| commit | e9d0018abf8dd0c692db4cfe8f5d1bd1c150d643 (patch) | |
| tree | f52065d76f022ca0afe150daaa63c9ddc9157060 /src/libsyntax/parse/token.rs | |
| parent | f04eb37c7ea19bbd2cff12d15816873e0a46fc86 (diff) | |
| parent | 1393c3a3f438c896083405dca501c8cf05767c65 (diff) | |
| download | rust-e9d0018abf8dd0c692db4cfe8f5d1bd1c150d643.tar.gz rust-e9d0018abf8dd0c692db4cfe8f5d1bd1c150d643.zip | |
auto merge of #6356 : dotdash/rust/strinterner, r=pcwalton
&str can be turned into @~str on demand, using to_owned(), so for strings, we can create a specialized interner that accepts &str for intern() and find() but stores and returns @~str.
Diffstat (limited to 'src/libsyntax/parse/token.rs')
| -rw-r--r-- | src/libsyntax/parse/token.rs | 82 |
1 files changed, 41 insertions, 41 deletions
diff --git a/src/libsyntax/parse/token.rs b/src/libsyntax/parse/token.rs index fe7bd5b3bc1..4483cc42361 100644 --- a/src/libsyntax/parse/token.rs +++ b/src/libsyntax/parse/token.rs @@ -11,7 +11,7 @@ use ast; use ast_util; use parse::token; -use util::interner::Interner; +use util::interner::StrInterner; use util::interner; use core::cmp::Equiv; @@ -390,14 +390,14 @@ pub fn token_to_binop(tok: Token) -> Option<ast::binop> { } pub struct ident_interner { - priv interner: Interner<@~str>, + priv interner: StrInterner, } pub impl ident_interner { - fn intern(&self, val: @~str) -> ast::ident { + fn intern(&self, val: &str) -> ast::ident { ast::ident { repr: self.interner.intern(val), ctxt: 0 } } - fn gensym(&self, val: @~str) -> ast::ident { + fn gensym(&self, val: &str) -> ast::ident { ast::ident { repr: self.interner.gensym(val), ctxt: 0 } } fn get(&self, idx: ast::ident) -> @~str { @@ -421,45 +421,45 @@ pub fn mk_fresh_ident_interner() -> @ident_interner { // the indices here must correspond to the numbers in // special_idents. let init_vec = ~[ - @~"_", // 0 - @~"anon", // 1 - @~"", // 2 - @~"unary", // 3 - @~"!", // 4 - @~"[]", // 5 - @~"unary-", // 6 - @~"__extensions__", // 7 - @~"self", // 8 - @~"item", // 9 - @~"block", // 10 - @~"stmt", // 11 - @~"pat", // 12 - @~"expr", // 13 - @~"ty", // 14 - @~"ident", // 15 - @~"path", // 16 - @~"tt", // 17 - @~"matchers", // 18 - @~"str", // 19 - @~"TyVisitor", // 20 - @~"arg", // 21 - @~"descrim", // 22 - @~"__rust_abi", // 23 - @~"__rust_stack_shim", // 24 - @~"TyDesc", // 25 - @~"main", // 26 - @~"<opaque>", // 27 - @~"blk", // 28 - @~"static", // 29 - @~"intrinsic", // 30 - @~"__foreign_mod__", // 31 - @~"__field__", // 32 - @~"C", // 33 - @~"Self", // 34 + "_", // 0 + "anon", // 1 + "", // 2 + "unary", // 3 + "!", // 4 + "[]", // 5 + "unary-", // 6 + "__extensions__", // 7 + "self", // 8 + "item", // 9 + "block", // 10 + "stmt", // 11 + "pat", // 12 + "expr", // 13 + "ty", // 14 + "ident", // 15 + "path", // 16 + "tt", // 17 + "matchers", // 18 + "str", // 19 + "TyVisitor", // 20 + "arg", // 21 + "descrim", // 22 + "__rust_abi", // 23 + "__rust_stack_shim", // 24 + "TyDesc", // 25 + "main", // 26 + "<opaque>", // 27 + "blk", // 28 + "static", // 29 + "intrinsic", // 30 + "__foreign_mod__", // 31 + "__field__", // 32 + "C", // 33 + "Self", // 34 ]; let rv = @ident_interner { - interner: interner::Interner::prefill(init_vec) + interner: interner::StrInterner::prefill(init_vec) }; unsafe { task::local_data::local_data_set(interner_key!(), @rv); @@ -483,7 +483,7 @@ pub fn mk_ident_interner() -> @ident_interner { /* for when we don't care about the contents; doesn't interact with TLD or serialization */ pub fn mk_fake_ident_interner() -> @ident_interner { - @ident_interner { interner: interner::Interner::new() } + @ident_interner { interner: interner::StrInterner::new() } } /** |
