@@ -359,17 +359,14 @@ impl<'a> Tokenizer<'a> {
359
359
}
360
360
361
361
#[ inline]
362
- fn next_char ( & self ) -> char { self . char_at ( 0 ) }
363
-
364
- #[ inline]
365
- fn char_at ( & self , offset : usize ) -> char {
366
- self . input [ self . position + offset..] . chars ( ) . next ( ) . unwrap ( )
362
+ fn next_char ( & self ) -> char {
363
+ self . input [ self . position ..] . chars ( ) . next ( ) . unwrap ( )
367
364
}
368
365
369
366
#[ inline]
370
367
fn has_newline_at ( & self , offset : usize ) -> bool {
371
368
self . position + offset < self . input . len ( ) &&
372
- matches ! ( self . char_at ( offset) , '\n' | '\r' | '\x0C' )
369
+ matches ! ( self . byte_at ( offset) , b '\n' | b '\r' | b '\x0C')
373
370
}
374
371
375
372
#[ inline]
@@ -405,8 +402,8 @@ fn next_token<'a>(tokenizer: &mut Tokenizer<'a>) -> Result<Token<'a>, ()> {
405
402
if tokenizer. is_eof ( ) {
406
403
return Err ( ( ) )
407
404
}
408
- let c = tokenizer. next_byte_unchecked ( ) ;
409
- let token = match_byte ! { c ,
405
+ let b = tokenizer. next_byte_unchecked ( ) ;
406
+ let token = match_byte ! { b ,
410
407
b'\t' | b'\n' | b' ' | b'\r' | b'\x0C' => {
411
408
let start_position = tokenizer. position( ) ;
412
409
tokenizer. advance( 1 ) ;
@@ -425,7 +422,7 @@ fn next_token<'a>(tokenizer: &mut Tokenizer<'a>) -> Result<Token<'a>, ()> {
425
422
else if !tokenizer. is_eof( ) && match tokenizer. next_byte_unchecked( ) {
426
423
b'a' ...b'z' | b'A' ...b'Z' | b'0' ...b'9' | b'-' | b'_' => true ,
427
424
b'\\' => !tokenizer. has_newline_at( 1 ) ,
428
- _ => !c . is_ascii( ) ,
425
+ _ => !b . is_ascii( ) ,
429
426
} { Hash ( consume_name( tokenizer) ) }
430
427
else { Delim ( '#' ) }
431
428
} ,
@@ -555,12 +552,11 @@ fn next_token<'a>(tokenizer: &mut Tokenizer<'a>) -> Result<Token<'a>, ()> {
555
552
else { tokenizer. advance( 1 ) ; Delim ( '~' ) }
556
553
} ,
557
554
_ => {
558
- if !c . is_ascii( ) {
555
+ if !b . is_ascii( ) {
559
556
consume_ident_like( tokenizer)
560
557
} else {
561
- let ret = Delim ( tokenizer. next_char( ) ) ;
562
558
tokenizer. advance( 1 ) ;
563
- ret
559
+ Delim ( b as char )
564
560
}
565
561
} ,
566
562
} ;
@@ -671,11 +667,11 @@ fn is_ident_start(tokenizer: &mut Tokenizer) -> bool {
671
667
true
672
668
}
673
669
b'\\' => { !tokenizer. has_newline_at( 1 ) }
674
- c => { !c . is_ascii( ) } ,
670
+ b => { !b . is_ascii( ) } ,
675
671
}
676
672
} ,
677
673
b'\\' => { !tokenizer. has_newline_at( 1 ) } ,
678
- c => { !c . is_ascii( ) } ,
674
+ b => { !b . is_ascii( ) } ,
679
675
}
680
676
}
681
677
@@ -759,9 +755,9 @@ fn consume_numeric<'a>(tokenizer: &mut Tokenizer<'a>) -> Token<'a> {
759
755
// Do all the math in f64 so that large numbers overflow to +/-inf
760
756
// and i32::{MIN, MAX} are within range.
761
757
762
- let ( has_sign, sign) = match tokenizer. next_char ( ) {
763
- '-' => ( true , -1. ) ,
764
- '+' => ( true , 1. ) ,
758
+ let ( has_sign, sign) = match tokenizer. next_byte_unchecked ( ) {
759
+ b '-' => ( true , -1. ) ,
760
+ b '+' => ( true , 1. ) ,
765
761
_ => ( false , 1. ) ,
766
762
} ;
767
763
if has_sign {
@@ -780,8 +776,8 @@ fn consume_numeric<'a>(tokenizer: &mut Tokenizer<'a>) -> Token<'a> {
780
776
let mut is_integer = true ;
781
777
782
778
let mut fractional_part: f64 = 0. ;
783
- if tokenizer. has_at_least ( 1 ) && tokenizer. next_char ( ) == '.'
784
- && matches ! ( tokenizer. char_at ( 1 ) , '0' ...'9' ) {
779
+ if tokenizer. has_at_least ( 1 ) && tokenizer. next_byte_unchecked ( ) == b '.'
780
+ && matches ! ( tokenizer. byte_at ( 1 ) , b '0' ...b '9') {
785
781
is_integer = false ;
786
782
tokenizer. advance ( 1 ) ; // Consume '.'
787
783
let mut factor = 0.1 ;
0 commit comments