diff options
| author | Paul Stansifer <paul.stansifer@gmail.com> | 2012-08-02 14:33:26 -0700 |
|---|---|---|
| committer | Paul Stansifer <paul.stansifer@gmail.com> | 2012-08-22 14:59:24 -0700 |
| commit | 9a7890d73af5ebe4bf862fa727427e290da1391b (patch) | |
| tree | ab7db3f5f973934aed69d3eb0c7e79c18ccf7732 /src/libsyntax | |
| parent | 744fea1a4f1b826def484aa4584e939fa272a8c3 (diff) | |
| download | rust-9a7890d73af5ebe4bf862fa727427e290da1391b.tar.gz rust-9a7890d73af5ebe4bf862fa727427e290da1391b.zip | |
Centralize ident interner generation.
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/ext/tt/transcribe.rs | 8 | ||||
| -rw-r--r-- | src/libsyntax/parse.rs | 21 | ||||
| -rw-r--r-- | src/libsyntax/parse/comments.rs | 5 | ||||
| -rw-r--r-- | src/libsyntax/parse/lexer.rs | 13 | ||||
| -rw-r--r-- | src/libsyntax/parse/token.rs | 8 | ||||
| -rw-r--r-- | src/libsyntax/print/pprust.rs | 8 |
6 files changed, 32 insertions, 31 deletions
diff --git a/src/libsyntax/ext/tt/transcribe.rs b/src/libsyntax/ext/tt/transcribe.rs index 8acf0e8ec6d..a166957231e 100644 --- a/src/libsyntax/ext/tt/transcribe.rs +++ b/src/libsyntax/ext/tt/transcribe.rs @@ -1,9 +1,9 @@ -import util::interner::interner; import diagnostic::span_handler; import ast::{token_tree, tt_delim, tt_tok, tt_seq, tt_nonterminal,ident}; import earley_parser::{named_match, matched_seq, matched_nonterminal}; import codemap::span; -import parse::token::{EOF, INTERPOLATED, IDENT, token, nt_ident}; +import parse::token::{EOF, INTERPOLATED, IDENT, token, nt_ident, + ident_interner}; import std::map::{hashmap, box_str_hash}; export tt_reader, new_tt_reader, dup_tt_reader, tt_next_token; @@ -25,7 +25,7 @@ type tt_frame = @{ type tt_reader = @{ sp_diag: span_handler, - interner: interner<@~str>, + interner: ident_interner, mut cur: tt_frame, /* for MBE-style macro transcription */ interpolations: std::map::hashmap<ident, @named_match>, @@ -39,7 +39,7 @@ type tt_reader = @{ /** This can do Macro-By-Example transcription. On the other hand, if * `src` contains no `tt_seq`s and `tt_nonterminal`s, `interp` can (and * should) be none. */ -fn new_tt_reader(sp_diag: span_handler, itr: interner<@~str>, +fn new_tt_reader(sp_diag: span_handler, itr: ident_interner, interp: option<std::map::hashmap<ident,@named_match>>, src: ~[ast::token_tree]) -> tt_reader { diff --git a/src/libsyntax/parse.rs b/src/libsyntax/parse.rs index deaaaf69b1c..bb21ba92679 100644 --- a/src/libsyntax/parse.rs +++ b/src/libsyntax/parse.rs @@ -19,12 +19,13 @@ import ast::node_id; import util::interner; import diagnostic::{span_handler, mk_span_handler, mk_handler, emitter}; import lexer::{reader, string_reader}; +import parse::token::{ident_interner, mk_ident_interner}; type parse_sess = @{ cm: codemap::codemap, mut next_id: node_id, span_diagnostic: span_handler, - interner: interner::interner<@~str>, + interner: ident_interner, // these two must be kept up to date mut chpos: uint, mut byte_pos: uint @@ -33,21 +34,19 @@ type parse_sess = @{ fn new_parse_sess(demitter: option<emitter>) -> parse_sess { let cm = codemap::new_codemap(); return @{cm: cm, - mut next_id: 1, - span_diagnostic: mk_span_handler(mk_handler(demitter), cm), - interner: interner::mk::<@~str>(|x| str::hash(*x), - |x,y| str::eq(*x, *y)), - mut chpos: 0u, mut byte_pos: 0u}; + mut next_id: 1, + span_diagnostic: mk_span_handler(mk_handler(demitter), cm), + interner: mk_ident_interner(), + mut chpos: 0u, mut byte_pos: 0u}; } fn new_parse_sess_special_handler(sh: span_handler, cm: codemap::codemap) -> parse_sess { return @{cm: cm, - mut next_id: 1, - span_diagnostic: sh, - interner: interner::mk::<@~str>(|x| str::hash(*x), - |x,y| str::eq(*x, *y)), - mut chpos: 0u, mut byte_pos: 0u}; + mut next_id: 1, + span_diagnostic: sh, + interner: mk_ident_interner(), + mut chpos: 0u, mut byte_pos: 0u}; } fn parse_crate_from_file(input: ~str, cfg: ast::crate_cfg, diff --git a/src/libsyntax/parse/comments.rs b/src/libsyntax/parse/comments.rs index 701dd9301ca..b10da4482e4 100644 --- a/src/libsyntax/parse/comments.rs +++ b/src/libsyntax/parse/comments.rs @@ -276,10 +276,7 @@ fn gather_comments_and_literals(span_diagnostic: diagnostic::span_handler, srdr: io::Reader) -> {cmnts: ~[cmnt], lits: ~[lit]} { let src = @str::from_bytes(srdr.read_whole_stream()); - let itr = interner::mk::<@~str>( - |x| str::hash(*x), - |x,y| str::eq(*x, *y) - ); + let itr = parse::token::mk_ident_interner(); let rdr = lexer::new_low_level_string_reader (span_diagnostic, codemap::new_filemap(path, src, 0u, 0u), itr); diff --git a/src/libsyntax/parse/lexer.rs b/src/libsyntax/parse/lexer.rs index aaafe958efb..a796073c9dd 100644 --- a/src/libsyntax/parse/lexer.rs +++ b/src/libsyntax/parse/lexer.rs @@ -1,4 +1,3 @@ -import util::interner::interner; import diagnostic::span_handler; import codemap::span; import ext::tt::transcribe::{tt_reader, new_tt_reader, dup_tt_reader, @@ -14,7 +13,7 @@ trait reader { fn next_token() -> {tok: token::token, sp: span}; fn fatal(~str) -> !; fn span_diag() -> span_handler; - pure fn interner() -> interner<@~str>; + pure fn interner() -> token::ident_interner; fn peek() -> {tok: token::token, sp: span}; fn dup() -> reader; } @@ -27,7 +26,7 @@ type string_reader = @{ mut curr: char, mut chpos: uint, filemap: codemap::filemap, - interner: interner<@~str>, + interner: token::ident_interner, /* cached: */ mut peek_tok: token::token, mut peek_span: span @@ -35,7 +34,7 @@ type string_reader = @{ fn new_string_reader(span_diagnostic: span_handler, filemap: codemap::filemap, - itr: interner<@~str>) -> string_reader { + itr: token::ident_interner) -> string_reader { let r = new_low_level_string_reader(span_diagnostic, filemap, itr); string_advance_token(r); /* fill in peek_* */ return r; @@ -44,7 +43,7 @@ fn new_string_reader(span_diagnostic: span_handler, /* For comments.rs, which hackily pokes into 'pos' and 'curr' */ fn new_low_level_string_reader(span_diagnostic: span_handler, filemap: codemap::filemap, - itr: interner<@~str>) + itr: token::ident_interner) -> string_reader { let r = @{span_diagnostic: span_diagnostic, src: filemap.src, mut col: 0u, mut pos: 0u, mut curr: -1 as char, @@ -79,7 +78,7 @@ impl string_reader: reader { self.span_diagnostic.span_fatal(copy self.peek_span, m) } fn span_diag() -> span_handler { self.span_diagnostic } - pure fn interner() -> interner<@~str> { self.interner } + pure fn interner() -> token::ident_interner { self.interner } fn peek() -> {tok: token::token, sp: span} { {tok: self.peek_tok, sp: self.peek_span} } @@ -101,7 +100,7 @@ impl tt_reader: reader { self.sp_diag.span_fatal(copy self.cur_span, m); } fn span_diag() -> span_handler { self.sp_diag } - pure fn interner() -> interner<@~str> { self.interner } + pure fn interner() -> token::ident_interner { self.interner } fn peek() -> {tok: token::token, sp: span} { { tok: self.cur_tok, sp: self.cur_span } } diff --git a/src/libsyntax/parse/token.rs b/src/libsyntax/parse/token.rs index 82f61b7ed3e..a1309e3ecef 100644 --- a/src/libsyntax/parse/token.rs +++ b/src/libsyntax/parse/token.rs @@ -277,6 +277,14 @@ pure fn is_bar(t: token) -> bool { match t { BINOP(OR) | OROR => true, _ => false } } +type ident_interner = util::interner::interner<@~str>; + +fn mk_ident_interner() -> ident_interner { + let rv = @interner::mk::<@~str>(|x| str::hash(*x), + |x,y| str::eq(*x, *y)); + rv +} + /** * All the valid words that have meaning in the Rust language. * diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index 609b4d2778c..b8872f76d8d 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -1,5 +1,4 @@ -import parse::comments; -import parse::lexer; +import parse::{comments, lexer, token}; import codemap::codemap; import pp::{break_offset, word, printer, space, zerobreak, hardbreak, breaks, consistent, @@ -30,7 +29,7 @@ fn no_ann() -> pp_ann { type ps = @{s: pp::printer, cm: option<codemap>, - intr: interner::interner<@~str>, + intr: token::ident_interner, comments: option<~[comments::cmnt]>, literals: option<~[comments::lit]>, mut cur_cmnt: uint, @@ -51,8 +50,7 @@ fn end(s: ps) { fn rust_printer(writer: io::Writer) -> ps { return @{s: pp::mk_printer(writer, default_columns), cm: none::<codemap>, - intr: interner::mk::<@~str>(|x| str::hash(*x), - |x,y| str::eq(*x, *y)), + intr: token::mk_ident_interner(), comments: none::<~[comments::cmnt]>, literals: none::<~[comments::lit]>, mut cur_cmnt: 0u, |
