Parse integers as BigInt (#2642)

* Parse integer shape as BigInt

* Use implicit serde from BigInt crate
This commit is contained in:
Chris Gillespie
2020-10-06 10:30:18 -07:00
committed by GitHub
parent 93410c470e
commit a18b2702ca
5 changed files with 18 additions and 37 deletions

View File

@ -735,7 +735,7 @@ fn parse_arg(
match expected_type {
SyntaxShape::Number => {
if let Ok(x) = lite_arg.item.parse::<i64>() {
if let Ok(x) = lite_arg.item.parse::<BigInt>() {
(
SpannedExpression::new(Expression::integer(x), lite_arg.span),
None,
@ -757,7 +757,7 @@ fn parse_arg(
}
}
SyntaxShape::Int => {
if let Ok(x) = lite_arg.item.parse::<i64>() {
if let Ok(x) = lite_arg.item.parse::<BigInt>() {
(
SpannedExpression::new(Expression::integer(x), lite_arg.span),
None,
@ -945,7 +945,7 @@ mod test {
let registry = MockRegistry::new();
let result = parse_arg(SyntaxShape::Int, &registry, &input);
assert_eq!(result.1, None);
assert_eq!(result.0.expr, Expression::integer(32));
assert_eq!(result.0.expr, Expression::integer(BigInt::from(32)));
Ok(())
}
@ -970,14 +970,24 @@ mod test {
let registry = MockRegistry::new();
let result = parse_arg(SyntaxShape::Number, &registry, &input);
assert_eq!(result.1, None);
assert_eq!(result.0.expr, Expression::integer(-34));
assert_eq!(result.0.expr, Expression::integer(BigInt::from(-34)));
let raw = "34".to_string();
let input = raw.clone().spanned(Span::new(0, raw.len()));
let registry = MockRegistry::new();
let result = parse_arg(SyntaxShape::Number, &registry, &input);
assert_eq!(result.1, None);
assert_eq!(result.0.expr, Expression::integer(34));
assert_eq!(result.0.expr, Expression::integer(BigInt::from(34)));
let raw = "36893488147419103232".to_string();
let input = raw.clone().spanned(Span::new(0, raw.len()));
let registry = MockRegistry::new();
let result = parse_arg(SyntaxShape::Number, &registry, &input);
assert_eq!(result.1, None);
assert_eq!(
result.0.expr,
Expression::integer(BigInt::from(36893488147419103232 as u128))
);
Ok(())
}
}