Make parsing about 0.3 seconds faster.

This commit is contained in:
Eric Holk 2012-07-25 19:13:58 -07:00
parent c953dad0b9
commit ab1defb1ce
3 changed files with 14 additions and 13 deletions
src/libsyntax/parse

@ -141,17 +141,18 @@ impl parser_common of parser_common for parser {
fn eat_keyword(word: ~str) -> bool {
self.require_keyword(word);
// FIXME (#13042): this gratuitous use of @ is to
// workaround LLVM bug.
alt @self.token {
@token::IDENT(sid, false) {
let mut bump = false;
let val = alt self.token {
token::IDENT(sid, false) {
if str::eq(word, *self.get_str(sid)) {
self.bump();
ret true;
} else { ret false; }
bump = true;
true
} else { false }
}
_ { ret false; }
}
_ { false }
};
if bump { self.bump() }
val
}
fn expect_keyword(word: ~str) {

@ -14,7 +14,7 @@ iface reader {
fn next_token() -> {tok: token::token, sp: span};
fn fatal(~str) -> !;
fn span_diag() -> span_handler;
fn interner() -> @interner<@~str>;
pure fn interner() -> @interner<@~str>;
fn peek() -> {tok: token::token, sp: span};
fn dup() -> reader;
}
@ -79,7 +79,7 @@ impl string_reader_as_reader of reader for string_reader {
self.span_diagnostic.span_fatal(copy self.peek_span, m)
}
fn span_diag() -> span_handler { self.span_diagnostic }
fn interner() -> @interner<@~str> { self.interner }
pure fn interner() -> @interner<@~str> { self.interner }
fn peek() -> {tok: token::token, sp: span} {
{tok: self.peek_tok, sp: self.peek_span}
}
@ -101,7 +101,7 @@ impl tt_reader_as_reader of reader for tt_reader {
self.sp_diag.span_fatal(copy self.cur_span, m);
}
fn span_diag() -> span_handler { self.sp_diag }
fn interner() -> @interner<@~str> { self.interner }
pure fn interner() -> @interner<@~str> { self.interner }
fn peek() -> {tok: token::token, sp: span} {
{ tok: self.cur_tok, sp: self.cur_span }
}

@ -232,7 +232,7 @@ class parser {
fn warn(m: ~str) {
self.sess.span_diagnostic.span_warn(copy self.span, m)
}
fn get_str(i: token::str_num) -> @~str {
pure fn get_str(i: token::str_num) -> @~str {
interner::get(*self.reader.interner(), i)
}
fn get_id() -> node_id { next_node_id(self.sess) }