Skip to content

Commit 9a7890d

Browse files
committed
Centralize ident interner generation.
1 parent 744fea1 commit 9a7890d

File tree

7 files changed

+35
-37
lines changed

7 files changed

+35
-37
lines changed

src/fuzzer/fuzzer.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -260,8 +260,7 @@ fn check_variants_T<T: copy>(
260260
@as_str(|a|pprust::print_crate(
261261
codemap,
262262
// Assuming we're not generating any token_trees
263-
syntax::util::interner::mk::<@~str>(
264-
|x| str::hash(*x), |x,y| str::eq(*x,*y)),
263+
syntax::parse::token::mk_ident_interner(),
265264
diagnostic::mk_span_handler(handler, codemap),
266265
crate2,
267266
filename,
@@ -423,8 +422,7 @@ fn parse_and_print(code: @~str) -> ~str {
423422
pprust::print_crate(
424423
sess.cm,
425424
// Assuming there are no token_trees
426-
syntax::util::interner::mk::<@~str>(
427-
|x| str::hash(*x), |x,y| str::eq(*x,*y)),
425+
syntax::parse::token::mk_ident_interner(),
428426
sess.span_diagnostic,
429427
crate,
430428
filename,
@@ -572,8 +570,7 @@ fn check_variants(files: ~[~str], cx: context) {
572570
as_str(|a| pprust::print_crate(
573571
sess.cm,
574572
// Assuming no token_trees
575-
syntax::util::interner::mk::<@~str>(
576-
|x| str::hash(*x), |x,y| str::eq(*x,*y)),
573+
syntax::parse::token::mk_ident_interner(),
577574
sess.span_diagnostic,
578575
crate,
579576
file,

src/libsyntax/ext/tt/transcribe.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import util::interner::interner;
21
import diagnostic::span_handler;
32
import ast::{token_tree, tt_delim, tt_tok, tt_seq, tt_nonterminal,ident};
43
import earley_parser::{named_match, matched_seq, matched_nonterminal};
54
import codemap::span;
6-
import parse::token::{EOF, INTERPOLATED, IDENT, token, nt_ident};
5+
import parse::token::{EOF, INTERPOLATED, IDENT, token, nt_ident,
6+
ident_interner};
77
import std::map::{hashmap, box_str_hash};
88

99
export tt_reader, new_tt_reader, dup_tt_reader, tt_next_token;
@@ -25,7 +25,7 @@ type tt_frame = @{
2525

2626
type tt_reader = @{
2727
sp_diag: span_handler,
28-
interner: interner<@~str>,
28+
interner: ident_interner,
2929
mut cur: tt_frame,
3030
/* for MBE-style macro transcription */
3131
interpolations: std::map::hashmap<ident, @named_match>,
@@ -39,7 +39,7 @@ type tt_reader = @{
3939
/** This can do Macro-By-Example transcription. On the other hand, if
4040
* `src` contains no `tt_seq`s and `tt_nonterminal`s, `interp` can (and
4141
* should) be none. */
42-
fn new_tt_reader(sp_diag: span_handler, itr: interner<@~str>,
42+
fn new_tt_reader(sp_diag: span_handler, itr: ident_interner,
4343
interp: option<std::map::hashmap<ident,@named_match>>,
4444
src: ~[ast::token_tree])
4545
-> tt_reader {

src/libsyntax/parse.rs

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,13 @@ import ast::node_id;
1919
import util::interner;
2020
import diagnostic::{span_handler, mk_span_handler, mk_handler, emitter};
2121
import lexer::{reader, string_reader};
22+
import parse::token::{ident_interner, mk_ident_interner};
2223

2324
type parse_sess = @{
2425
cm: codemap::codemap,
2526
mut next_id: node_id,
2627
span_diagnostic: span_handler,
27-
interner: interner::interner<@~str>,
28+
interner: ident_interner,
2829
// these two must be kept up to date
2930
mut chpos: uint,
3031
mut byte_pos: uint
@@ -33,21 +34,19 @@ type parse_sess = @{
3334
fn new_parse_sess(demitter: option<emitter>) -> parse_sess {
3435
let cm = codemap::new_codemap();
3536
return @{cm: cm,
36-
mut next_id: 1,
37-
span_diagnostic: mk_span_handler(mk_handler(demitter), cm),
38-
interner: interner::mk::<@~str>(|x| str::hash(*x),
39-
|x,y| str::eq(*x, *y)),
40-
mut chpos: 0u, mut byte_pos: 0u};
37+
mut next_id: 1,
38+
span_diagnostic: mk_span_handler(mk_handler(demitter), cm),
39+
interner: mk_ident_interner(),
40+
mut chpos: 0u, mut byte_pos: 0u};
4141
}
4242

4343
fn new_parse_sess_special_handler(sh: span_handler, cm: codemap::codemap)
4444
-> parse_sess {
4545
return @{cm: cm,
46-
mut next_id: 1,
47-
span_diagnostic: sh,
48-
interner: interner::mk::<@~str>(|x| str::hash(*x),
49-
|x,y| str::eq(*x, *y)),
50-
mut chpos: 0u, mut byte_pos: 0u};
46+
mut next_id: 1,
47+
span_diagnostic: sh,
48+
interner: mk_ident_interner(),
49+
mut chpos: 0u, mut byte_pos: 0u};
5150
}
5251

5352
fn parse_crate_from_file(input: ~str, cfg: ast::crate_cfg,

src/libsyntax/parse/comments.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -276,10 +276,7 @@ fn gather_comments_and_literals(span_diagnostic: diagnostic::span_handler,
276276
srdr: io::Reader) ->
277277
{cmnts: ~[cmnt], lits: ~[lit]} {
278278
let src = @str::from_bytes(srdr.read_whole_stream());
279-
let itr = interner::mk::<@~str>(
280-
|x| str::hash(*x),
281-
|x,y| str::eq(*x, *y)
282-
);
279+
let itr = parse::token::mk_ident_interner();
283280
let rdr = lexer::new_low_level_string_reader
284281
(span_diagnostic, codemap::new_filemap(path, src, 0u, 0u), itr);
285282

src/libsyntax/parse/lexer.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import util::interner::interner;
21
import diagnostic::span_handler;
32
import codemap::span;
43
import ext::tt::transcribe::{tt_reader, new_tt_reader, dup_tt_reader,
@@ -14,7 +13,7 @@ trait reader {
1413
fn next_token() -> {tok: token::token, sp: span};
1514
fn fatal(~str) -> !;
1615
fn span_diag() -> span_handler;
17-
pure fn interner() -> interner<@~str>;
16+
pure fn interner() -> token::ident_interner;
1817
fn peek() -> {tok: token::token, sp: span};
1918
fn dup() -> reader;
2019
}
@@ -27,15 +26,15 @@ type string_reader = @{
2726
mut curr: char,
2827
mut chpos: uint,
2928
filemap: codemap::filemap,
30-
interner: interner<@~str>,
29+
interner: token::ident_interner,
3130
/* cached: */
3231
mut peek_tok: token::token,
3332
mut peek_span: span
3433
};
3534

3635
fn new_string_reader(span_diagnostic: span_handler,
3736
filemap: codemap::filemap,
38-
itr: interner<@~str>) -> string_reader {
37+
itr: token::ident_interner) -> string_reader {
3938
let r = new_low_level_string_reader(span_diagnostic, filemap, itr);
4039
string_advance_token(r); /* fill in peek_* */
4140
return r;
@@ -44,7 +43,7 @@ fn new_string_reader(span_diagnostic: span_handler,
4443
/* For comments.rs, which hackily pokes into 'pos' and 'curr' */
4544
fn new_low_level_string_reader(span_diagnostic: span_handler,
4645
filemap: codemap::filemap,
47-
itr: interner<@~str>)
46+
itr: token::ident_interner)
4847
-> string_reader {
4948
let r = @{span_diagnostic: span_diagnostic, src: filemap.src,
5049
mut col: 0u, mut pos: 0u, mut curr: -1 as char,
@@ -79,7 +78,7 @@ impl string_reader: reader {
7978
self.span_diagnostic.span_fatal(copy self.peek_span, m)
8079
}
8180
fn span_diag() -> span_handler { self.span_diagnostic }
82-
pure fn interner() -> interner<@~str> { self.interner }
81+
pure fn interner() -> token::ident_interner { self.interner }
8382
fn peek() -> {tok: token::token, sp: span} {
8483
{tok: self.peek_tok, sp: self.peek_span}
8584
}
@@ -101,7 +100,7 @@ impl tt_reader: reader {
101100
self.sp_diag.span_fatal(copy self.cur_span, m);
102101
}
103102
fn span_diag() -> span_handler { self.sp_diag }
104-
pure fn interner() -> interner<@~str> { self.interner }
103+
pure fn interner() -> token::ident_interner { self.interner }
105104
fn peek() -> {tok: token::token, sp: span} {
106105
{ tok: self.cur_tok, sp: self.cur_span }
107106
}

src/libsyntax/parse/token.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,14 @@ pure fn is_bar(t: token) -> bool {
277277
match t { BINOP(OR) | OROR => true, _ => false }
278278
}
279279

280+
type ident_interner = util::interner::interner<@~str>;
281+
282+
fn mk_ident_interner() -> ident_interner {
283+
let rv = @interner::mk::<@~str>(|x| str::hash(*x),
284+
|x,y| str::eq(*x, *y));
285+
rv
286+
}
287+
280288
/**
281289
* All the valid words that have meaning in the Rust language.
282290
*

src/libsyntax/print/pprust.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import parse::comments;
2-
import parse::lexer;
1+
import parse::{comments, lexer, token};
32
import codemap::codemap;
43
import pp::{break_offset, word, printer,
54
space, zerobreak, hardbreak, breaks, consistent,
@@ -30,7 +29,7 @@ fn no_ann() -> pp_ann {
3029
type ps =
3130
@{s: pp::printer,
3231
cm: option<codemap>,
33-
intr: interner::interner<@~str>,
32+
intr: token::ident_interner,
3433
comments: option<~[comments::cmnt]>,
3534
literals: option<~[comments::lit]>,
3635
mut cur_cmnt: uint,
@@ -51,8 +50,7 @@ fn end(s: ps) {
5150
fn rust_printer(writer: io::Writer) -> ps {
5251
return @{s: pp::mk_printer(writer, default_columns),
5352
cm: none::<codemap>,
54-
intr: interner::mk::<@~str>(|x| str::hash(*x),
55-
|x,y| str::eq(*x, *y)),
53+
intr: token::mk_ident_interner(),
5654
comments: none::<~[comments::cmnt]>,
5755
literals: none::<~[comments::lit]>,
5856
mut cur_cmnt: 0u,

0 commit comments

Comments
 (0)