Skip to content

Commit b870477

Browse files
committed
Avoid unnecessary (re-)allocations in the lexer
1 parent 43cae88 commit b870477

File tree

1 file changed

+8
-7
lines changed

1 file changed

+8
-7
lines changed

src/libsyntax/parse/lexer.rs

+8-7
Original file line numberDiff line numberDiff line change
@@ -538,19 +538,19 @@ fn ident_continue(c: char) -> bool {
538538
// EFFECT: advances the input past that token
539539
// EFFECT: updates the interner
540540
fn next_token_inner(rdr: @mut StringReader) -> token::Token {
541-
let mut accum_str = ~"";
542541
let mut c = rdr.curr;
543542
if ident_start(c) {
544-
while ident_continue(c) {
545-
str::push_char(&mut accum_str, c);
543+
let start = byte_offset(rdr, rdr.last_pos);
544+
while ident_continue(rdr.curr) {
546545
bump(rdr);
547-
c = rdr.curr;
548546
}
549-
if accum_str == ~"_" { return token::UNDERSCORE; }
550-
let is_mod_name = c == ':' && nextch(rdr) == ':';
547+
let string = get_str_from(rdr, start);
548+
549+
if "_" == string { return token::UNDERSCORE; }
550+
let is_mod_name = rdr.curr == ':' && nextch(rdr) == ':';
551551

552552
// FIXME: perform NFKC normalization here. (Issue #2253)
553-
return token::IDENT(str_to_ident(accum_str), is_mod_name);
553+
return token::IDENT(str_to_ident(string), is_mod_name);
554554
}
555555
if is_dec_digit(c) {
556556
return scan_number(c, rdr);
@@ -690,6 +690,7 @@ fn next_token_inner(rdr: @mut StringReader) -> token::Token {
690690
return token::LIT_INT(c2 as i64, ast::ty_char);
691691
}
692692
'"' => {
693+
let mut accum_str = ~"";
693694
let n = byte_offset(rdr, rdr.last_pos);
694695
bump(rdr);
695696
while rdr.curr != '"' {

0 commit comments

Comments
 (0)