From: Nicolas Luck Date: Thu, 24 Aug 2023 16:10:47 +0000 (+0200) Subject: Fix parsing of floats X-Git-Tag: remove^2~32 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=c25888288a1e30e9852efbe5ca3e084c484f969e;p=scryer-prolog.git Fix parsing of floats --- diff --git a/src/machine/lib_machine.rs b/src/machine/lib_machine.rs index 9c524588..a3438783 100644 --- a/src/machine/lib_machine.rs +++ b/src/machine/lib_machine.rs @@ -52,7 +52,7 @@ impl Machine { .iter() // 4. Trim and remove empty lines .map(|s| s.trim()) - .map(|s| s.replace(".", "")) + .map(|s| if s.ends_with(".") { s[..s.len()-1].to_string() } else { s.to_string() }) .filter(|s| !s.is_empty()) // 5. Parse into QueryResolutionLine .map(QueryResolutionLine::try_from) diff --git a/src/machine/parsed_results.rs b/src/machine/parsed_results.rs index ec9b92b8..01ba6d54 100644 --- a/src/machine/parsed_results.rs +++ b/src/machine/parsed_results.rs @@ -163,7 +163,13 @@ impl TryFrom for Value { fn try_from(string: String) -> Result { let trimmed = string.trim(); - if trimmed.starts_with("'") && trimmed.ends_with("'") { + if let Ok(float_value) = string.parse::() { + println!("float value: {} -> {}", string, float_value); + Ok(Value::Float(OrderedFloat(float_value))) + } else if let Ok(int_value) = string.parse::() { + println!("int value: {} -> {}", string, int_value); + Ok(Value::Integer(int_value.into())) + } else if trimmed.starts_with("'") && trimmed.ends_with("'") { Ok(Value::String(trimmed[1..trimmed.len() - 1].into())) } else if trimmed.starts_with("\"") && trimmed.ends_with("\"") { Ok(Value::String(trimmed[1..trimmed.len() - 1].into()))