Allow zero-prefixed float exponents. (#322)

This commit is contained in:
Eric Huss 2019-08-23 09:55:15 -07:00 committed by Alex Crichton
parent 9d7890a6d0
commit f822f4661b
5 changed files with 28 additions and 3 deletions

View file

@ -1436,11 +1436,11 @@ impl<'a> Deserializer<'a> {
let (a, b) = if suffix.len() == 1 { let (a, b) = if suffix.len() == 1 {
self.eat(Token::Plus)?; self.eat(Token::Plus)?;
match self.next()? { match self.next()? {
Some((_, Token::Keylike(s))) => self.parse_integer(s, false, false, 10)?, Some((_, Token::Keylike(s))) => self.parse_integer(s, false, true, 10)?,
_ => return Err(self.error(start, ErrorKind::NumberInvalid)), _ => return Err(self.error(start, ErrorKind::NumberInvalid)),
} }
} else { } else {
self.parse_integer(&suffix[1..], true, false, 10)? self.parse_integer(&suffix[1..], true, true, 10)?
}; };
if b != "" { if b != "" {
return Err(self.error(start, ErrorKind::NumberInvalid)); return Err(self.error(start, ErrorKind::NumberInvalid));

View file

@ -270,7 +270,6 @@ fn bad_floats() {
bad!("a = 0.0e", "invalid number at line 1 column 5"); bad!("a = 0.0e", "invalid number at line 1 column 5");
bad!("a = 0.0e-", "invalid number at line 1 column 9"); bad!("a = 0.0e-", "invalid number at line 1 column 9");
bad!("a = 0.0e+", "invalid number at line 1 column 5"); bad!("a = 0.0e+", "invalid number at line 1 column 5");
bad!("a = 0.0e+00", "invalid number at line 1 column 11");
} }
#[test] #[test]

View file

@ -368,3 +368,9 @@ test!(
include_str!("valid/quote-surrounded-value.toml"), include_str!("valid/quote-surrounded-value.toml"),
include_str!("valid/quote-surrounded-value.json") include_str!("valid/quote-surrounded-value.json")
); );
test!(
float_exponent,
include_str!("valid/float-exponent.toml"),
include_str!("valid/float-exponent.json")
);

View file

@ -0,0 +1,11 @@
{
"lower": {"type": "float", "value": "300.0"},
"upper": {"type": "float", "value": "300.0"},
"neg": {"type": "float", "value": "0.03"},
"pos": {"type": "float", "value": "300.0"},
"zero": {"type": "float", "value": "3.0"},
"pointlower": {"type": "float", "value": "310.0"},
"pointupper": {"type": "float", "value": "310.0"},
"prefix-zero-exp": {"type": "float", "value": "1000000.0"},
"prefix-zero-exp-plus": {"type": "float", "value": "1000000.0"}
}

View file

@ -0,0 +1,9 @@
lower = 3e2
upper = 3E2
neg = 3e-2
pos = 3E+2
zero = 3e0
pointlower = 3.1e2
pointupper = 3.1E2
prefix-zero-exp = 1e06
prefix-zero-exp-plus = 1e+06