summaryrefslogtreecommitdiff
path: root/dhall_core/src/parser.rs
diff options
context:
space:
mode:
authorNadrieril2019-03-21 21:27:36 +0100
committerNadrieril2019-03-21 21:27:36 +0100
commit8d527e88168885ab754a039219d0ae682fa4508b (patch)
treeb26d26902ba84d611f9905add97b3a29d0dcf025 /dhall_core/src/parser.rs
parent6cbe21b84ffd274f92791ab8dbf9af6527978688 (diff)
Follow the spec for handling Doubles
Diffstat (limited to '')
-rw-r--r--dhall_core/src/parser.rs9
1 files changed, 5 insertions, 4 deletions
diff --git a/dhall_core/src/parser.rs b/dhall_core/src/parser.rs
index b07094d..7de75d2 100644
--- a/dhall_core/src/parser.rs
+++ b/dhall_core/src/parser.rs
@@ -348,7 +348,8 @@ make_parser! {
rule!(double_literal_raw<core::Double>;
raw_pair!(pair) => {
pair.as_str().trim()
- .parse()
+ .parse::<f64>()
+ .map(NaiveDouble::from)
.map_err(|e: std::num::ParseFloatError| custom_parse_error(&pair, format!("{}", e)))?
}
);
@@ -599,9 +600,9 @@ make_parser! {
rule!(literal_expression_raw<ParsedExpr> as expression; children!(
[double_literal_raw(n)] => bx(Expr::DoubleLit(n)),
- [minus_infinity_literal(n)] => bx(Expr::DoubleLit(std::f64::NEG_INFINITY)),
- [plus_infinity_literal(n)] => bx(Expr::DoubleLit(std::f64::INFINITY)),
- [NaN_raw(n)] => bx(Expr::DoubleLit(std::f64::NAN)),
+ [minus_infinity_literal(n)] => bx(Expr::DoubleLit(std::f64::NEG_INFINITY.into())),
+ [plus_infinity_literal(n)] => bx(Expr::DoubleLit(std::f64::INFINITY.into())),
+ [NaN_raw(n)] => bx(Expr::DoubleLit(std::f64::NAN.into())),
[natural_literal_raw(n)] => bx(Expr::NaturalLit(n)),
[integer_literal_raw(n)] => bx(Expr::IntegerLit(n)),
[double_quote_literal(s)] => bx(Expr::TextLit(s)),