@@ -668,13 +668,13 @@ define_handlers! {
668668 b'o' | b'O' => {
669669 tok. bump( ) ;
670670
671- return Ok ( Literal ( tok. read_octal( ) ) ) ;
671+ return Ok ( Literal ( tok. read_octal( start ) ) ) ;
672672 } ,
673673
674674 b'x' | b'X' => {
675675 tok. bump( ) ;
676676
677- return Ok ( Literal ( tok. read_hexadec( ) ) ) ;
677+ return Ok ( Literal ( tok. read_hexadec( start ) ) ) ;
678678 } ,
679679
680680 _ => { }
@@ -1034,60 +1034,49 @@ impl<'a> Tokenizer<'a> {
10341034 }
10351035 }
10361036
1037- Value :: Integer ( value)
1037+ Value :: Binary ( value)
10381038 }
10391039
10401040 #[ inline]
1041- fn read_octal ( & mut self ) -> Value {
1042- let mut value = 0 ;
1041+ fn consume_label_characters ( & mut self ) -> & str {
1042+ let start = self . index ;
10431043
1044- while !self . is_eof ( ) {
1045- let peek = self . read_byte ( ) ;
1046- let digit = match peek {
1047- b'0' ...b'7' => peek - b'0' ,
1048- _ => break
1049- } ;
1044+ self . bump ( ) ;
10501045
1051- value = ( value << 3 ) + digit as u64 ;
1046+ while ! self . is_eof ( ) && ident_lookup :: TABLE [ self . read_byte ( ) as usize ] {
10521047 self . bump ( ) ;
10531048 }
10541049
1055- Value :: Integer ( value)
1050+ unsafe {
1051+ self . source . slice_unchecked ( start, self . index )
1052+ }
10561053 }
10571054
10581055 #[ inline]
1059- fn read_hexadec ( & mut self ) -> Value {
1060- let mut value = 0 ;
1056+ fn read_octal ( & mut self , start : usize ) -> Value {
10611057
10621058 while !self . is_eof ( ) {
1063- let peek = self . read_byte ( ) ;
1064- let digit = match peek {
1065- b'0' ...b'9' => peek - b'0' ,
1066- b'a' ...b'f' => peek - b'a' + 10 ,
1067- b'A' ...b'F' => peek - b'A' + 10 ,
1059+ match self . read_byte ( ) {
1060+ b'0' ...b'7' => self . bump ( ) ,
10681061 _ => break
10691062 } ;
1070-
1071- value = ( value << 4 ) + digit as u64 ;
1072- self . bump ( ) ;
10731063 }
10741064
1075- Value :: Integer ( value )
1065+ Value :: Number ( self . slice_source ( start , self . index ) )
10761066 }
10771067
10781068 #[ inline]
1079- fn consume_label_characters ( & mut self ) -> & str {
1080- let start = self . index ;
1081-
1082- self . bump ( ) ;
1083-
1084- while !self . is_eof ( ) && ident_lookup:: TABLE [ self . read_byte ( ) as usize ] {
1085- self . bump ( ) ;
1069+ fn read_hexadec ( & mut self , start : usize ) -> Value {
1070+ while !self . is_eof ( ) {
1071+ match self . read_byte ( ) {
1072+ b'0' ...b'9' => self . bump ( ) ,
1073+ b'a' ...b'f' => self . bump ( ) ,
1074+ b'A' ...b'F' => self . bump ( ) ,
1075+ _ => break
1076+ } ;
10861077 }
10871078
1088- unsafe {
1089- self . source . slice_unchecked ( start, self . index )
1090- }
1079+ Value :: Number ( self . slice_source ( start, self . index ) )
10911080 }
10921081
10931082 #[ inline]
@@ -1104,5 +1093,4 @@ impl<'a> Tokenizer<'a> {
11041093
11051094 Value :: Number ( value)
11061095 }
1107-
11081096}
0 commit comments