@@ -218,9 +218,9 @@ fn parse_u64(s: &str) -> Result<u64, &'static str> {
218
218
219
219
if s. starts_with ( "-0x" ) {
220
220
return Err ( "Invalid character in hexadecimal number" ) ;
221
- } else if s . starts_with ( "0x" ) {
221
+ } else if let Some ( num ) = s . strip_prefix ( "0x" ) {
222
222
// Hexadecimal.
223
- for ch in s [ 2 .. ] . chars ( ) {
223
+ for ch in num . chars ( ) {
224
224
match ch. to_digit ( 16 ) {
225
225
Some ( digit) => {
226
226
digits += 1 ;
@@ -934,10 +934,10 @@ fn parse_float(s: &str, w: u8, t: u8) -> Result<u128, &'static str> {
934
934
debug_assert ! ( 1 + w + t <= 128 , "Too large IEEE format for u128" ) ;
935
935
debug_assert ! ( ( t + w + 1 ) . is_power_of_two( ) , "Unexpected IEEE format size" ) ;
936
936
937
- let ( sign_bit, s2) = if s . starts_with ( '-' ) {
938
- ( 1u128 << ( t + w) , & s [ 1 .. ] )
939
- } else if s . starts_with ( '+' ) {
940
- ( 0 , & s [ 1 .. ] )
937
+ let ( sign_bit, s2) = if let Some ( num ) = s . strip_prefix ( '-' ) {
938
+ ( 1u128 << ( t + w) , num )
939
+ } else if let Some ( num ) = s . strip_prefix ( '+' ) {
940
+ ( 0 , num )
941
941
} else {
942
942
( 0 , s)
943
943
} ;
@@ -959,18 +959,18 @@ fn parse_float(s: &str, w: u8, t: u8) -> Result<u128, &'static str> {
959
959
// Canonical quiet NaN: e = max, t = quiet.
960
960
return Ok ( sign_bit | max_e_bits | quiet_bit) ;
961
961
}
962
- if s2. starts_with ( "NaN:0x" ) {
962
+ if let Some ( nan ) = s2. strip_prefix ( "NaN:0x" ) {
963
963
// Quiet NaN with payload.
964
- return match u128:: from_str_radix ( & s2 [ 6 .. ] , 16 ) {
964
+ return match u128:: from_str_radix ( nan , 16 ) {
965
965
Ok ( payload) if payload < quiet_bit => {
966
966
Ok ( sign_bit | max_e_bits | quiet_bit | payload)
967
967
}
968
968
_ => Err ( "Invalid NaN payload" ) ,
969
969
} ;
970
970
}
971
- if s2. starts_with ( "sNaN:0x" ) {
971
+ if let Some ( nan ) = s2. strip_prefix ( "sNaN:0x" ) {
972
972
// Signaling NaN with payload.
973
- return match u128:: from_str_radix ( & s2 [ 7 .. ] , 16 ) {
973
+ return match u128:: from_str_radix ( nan , 16 ) {
974
974
Ok ( payload) if 0 < payload && payload < quiet_bit => {
975
975
Ok ( sign_bit | max_e_bits | payload)
976
976
}
0 commit comments