@@ -538,19 +538,19 @@ fn ident_continue(c: char) -> bool {
538538// EFFECT: advances the input past that token
539539// EFFECT: updates the interner
540540fn 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