mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-06-12 14:21:01 +00:00
Minor optimization to not check if JSON number starts with '-' twice
This commit is contained in:
+14
-15
@@ -108,7 +108,13 @@ impl<Iter> Deserializer<Iter>
|
|||||||
try!(self.parse_ident(b"alse"));
|
try!(self.parse_ident(b"alse"));
|
||||||
visitor.visit_bool(false)
|
visitor.visit_bool(false)
|
||||||
}
|
}
|
||||||
b'0' ... b'9' | b'-' => self.parse_number(visitor),
|
b'-' => {
|
||||||
|
try!(self.bump());
|
||||||
|
self.parse_number(false, visitor)
|
||||||
|
}
|
||||||
|
b'0' ... b'9' => {
|
||||||
|
self.parse_number(true, visitor)
|
||||||
|
}
|
||||||
b'"' => {
|
b'"' => {
|
||||||
try!(self.parse_string());
|
try!(self.parse_string());
|
||||||
let s = str::from_utf8(&self.str_buf).unwrap();
|
let s = str::from_utf8(&self.str_buf).unwrap();
|
||||||
@@ -145,16 +151,9 @@ impl<Iter> Deserializer<Iter>
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parse_number<V>(&mut self, mut visitor: V) -> Result<V::Value>
|
fn parse_number<V>(&mut self, pos: bool, mut visitor: V) -> Result<V::Value>
|
||||||
where V: de::Visitor,
|
where V: de::Visitor,
|
||||||
{
|
{
|
||||||
let mut neg = false;
|
|
||||||
|
|
||||||
if self.ch_is(b'-') {
|
|
||||||
try!(self.bump());
|
|
||||||
neg = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
let res = try!(self.parse_integer());
|
let res = try!(self.parse_integer());
|
||||||
|
|
||||||
if self.ch_is(b'.') || self.ch_is(b'e') || self.ch_is(b'E') {
|
if self.ch_is(b'.') || self.ch_is(b'e') || self.ch_is(b'E') {
|
||||||
@@ -168,13 +167,15 @@ impl<Iter> Deserializer<Iter>
|
|||||||
res = try!(self.parse_exponent(res));
|
res = try!(self.parse_exponent(res));
|
||||||
}
|
}
|
||||||
|
|
||||||
if neg {
|
if pos {
|
||||||
visitor.visit_f64(-res)
|
|
||||||
} else {
|
|
||||||
visitor.visit_f64(res)
|
visitor.visit_f64(res)
|
||||||
|
} else {
|
||||||
|
visitor.visit_f64(-res)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if neg {
|
if pos {
|
||||||
|
visitor.visit_u64(res)
|
||||||
|
} else {
|
||||||
let res = -(res as i64);
|
let res = -(res as i64);
|
||||||
|
|
||||||
// Make sure we didn't underflow.
|
// Make sure we didn't underflow.
|
||||||
@@ -183,8 +184,6 @@ impl<Iter> Deserializer<Iter>
|
|||||||
} else {
|
} else {
|
||||||
visitor.visit_i64(res)
|
visitor.visit_i64(res)
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
visitor.visit_u64(res)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user