Return a Result<i64, ()> from do_parse_integer

Fixes #10860
This commit is contained in:
Akshit Khurana 2016-04-26 23:01:15 -07:00
parent 77553ab42c
commit 4a3addb72f

View file

@ -35,13 +35,13 @@ pub enum AttrValue {
/// Shared implementation to parse an integer according to
/// <https://html.spec.whatwg.org/multipage/#rules-for-parsing-integers> or
/// <https://html.spec.whatwg.org/multipage/#rules-for-parsing-non-negative-integers>
fn do_parse_integer<T: Iterator<Item=char>>(input: T) -> Option<i64> {
fn do_parse_integer<T: Iterator<Item=char>>(input: T) -> Result<i64, ()> {
let mut input = input.skip_while(|c| {
HTML_SPACE_CHARACTERS.iter().any(|s| s == c)
}).peekable();
let sign = match input.peek() {
None => return None,
None => return Err(()),
Some(&'-') => {
input.next();
-1
@ -55,23 +55,23 @@ fn do_parse_integer<T: Iterator<Item=char>>(input: T) -> Option<i64> {
let (value, _) = read_numbers(input);
value.and_then(|value| value.checked_mul(sign))
value.and_then(|value| value.checked_mul(sign)).ok_or(())
}
/// Parse an integer according to
/// <https://html.spec.whatwg.org/multipage/#rules-for-parsing-integers>.
pub fn parse_integer<T: Iterator<Item=char>>(input: T) -> Result<i32, ()> {
do_parse_integer(input).and_then(|result| {
result.to_i32()
}).ok_or(())
result.to_i32().ok_or(())
})
}
/// Parse an integer according to
/// <https://html.spec.whatwg.org/multipage/#rules-for-parsing-non-negative-integers>
pub fn parse_unsigned_integer<T: Iterator<Item=char>>(input: T) -> Result<u32, ()> {
do_parse_integer(input).and_then(|result| {
result.to_u32()
}).ok_or(())
result.to_u32().ok_or(())
})
}
/// Parse a floating-point number according to