@@ -112,18 +112,18 @@ impl<'a> Parser<'a> {
112
112
max_digits : Option < usize > ,
113
113
allow_zero_prefix : bool ,
114
114
) -> Option < T > {
115
- // If max_digits.is_some(), then we are parsing a `u8` or `u16` and
116
- // don't need to use checked arithmetic since it fits within a `u32`.
117
- if let Some ( max_digits) = max_digits {
118
- // u32::MAX = 4_294_967_295u32, which is 10 digits long.
119
- // `max_digits` must be less than 10 to not overflow a `u32`.
120
- debug_assert ! ( max_digits < 10 ) ;
121
-
122
- self . read_atomically ( move |p| {
123
- let mut result = 0_u32 ;
124
- let mut digit_count = 0 ;
125
- let has_leading_zero = p. peek_char ( ) == Some ( '0' ) ;
115
+ self . read_atomically ( move |p| {
116
+ let mut digit_count = 0 ;
117
+ let has_leading_zero = p. peek_char ( ) == Some ( '0' ) ;
118
+
119
+ // If max_digits.is_some(), then we are parsing a `u8` or `u16` and
120
+ // don't need to use checked arithmetic since it fits within a `u32`.
121
+ let result = if let Some ( max_digits) = max_digits {
122
+ // u32::MAX = 4_294_967_295u32, which is 10 digits long.
123
+ // `max_digits` must be less than 10 to not overflow a `u32`.
124
+ debug_assert ! ( max_digits < 10 ) ;
126
125
126
+ let mut result = 0_u32 ;
127
127
while let Some ( digit) = p. read_atomically ( |p| p. read_char ( ) ?. to_digit ( radix) ) {
128
128
result *= radix;
129
129
result += digit;
@@ -134,35 +134,27 @@ impl<'a> Parser<'a> {
134
134
}
135
135
}
136
136
137
- if digit_count == 0 {
138
- None
139
- } else if !allow_zero_prefix && has_leading_zero && digit_count > 1 {
140
- None
141
- } else {
142
- result. try_into ( ) . ok ( )
143
- }
144
- } )
145
- } else {
146
- self . read_atomically ( move |p| {
137
+ result. try_into ( ) . ok ( )
138
+ } else {
147
139
let mut result = T :: ZERO ;
148
- let mut digit_count = 0 ;
149
- let has_leading_zero = p. peek_char ( ) == Some ( '0' ) ;
150
140
151
141
while let Some ( digit) = p. read_atomically ( |p| p. read_char ( ) ?. to_digit ( radix) ) {
152
142
result = result. checked_mul ( radix) ?;
153
143
result = result. checked_add ( digit) ?;
154
144
digit_count += 1 ;
155
145
}
156
146
157
- if digit_count == 0 {
158
- None
159
- } else if !allow_zero_prefix && has_leading_zero && digit_count > 1 {
160
- None
161
- } else {
162
- Some ( result)
163
- }
164
- } )
165
- }
147
+ Some ( result)
148
+ } ;
149
+
150
+ if digit_count == 0 {
151
+ None
152
+ } else if !allow_zero_prefix && has_leading_zero && digit_count > 1 {
153
+ None
154
+ } else {
155
+ result
156
+ }
157
+ } )
166
158
}
167
159
168
160
/// Reads an IPv4 address.
0 commit comments