From 9a7890d73af5ebe4bf862fa727427e290da1391b Mon Sep 17 00:00:00 2001 From: Paul Stansifer Date: Thu, 2 Aug 2012 14:33:26 -0700 Subject: Centralize ident interner generation. --- src/libsyntax/parse/comments.rs | 5 +---- src/libsyntax/parse/lexer.rs | 13 ++++++------- src/libsyntax/parse/token.rs | 8 ++++++++ 3 files changed, 15 insertions(+), 11 deletions(-) (limited to 'src/libsyntax/parse') 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. * -- cgit 1.4.1-3-g733a5