Disallow named number followed by smaller named number

like 1 million thousand
This commit is contained in:
Kasper 2021-07-07 04:21:44 +02:00
parent 3137979d55
commit 2d457de7f1
2 changed files with 13 additions and 1 deletions

View File

@ -1,3 +1,9 @@
## Next
- Add operator words `plus`, `minus` and `times`
- Disallow named number followed by smaller named number (like 1 million thousand)
- Fix/improve parsing of multi-word units
- Fix light second parsed as light year
## 1.6.0 - 2021 Jul 3
- Add support for non-US "metre" and "litre" spellings
- Add help menu

View File

@ -221,8 +221,14 @@ fn evaluate_node(ast_node: &AstNode) -> Result<Number, String> {
},
Token::NamedNumber(named_number) => {
let child_node = children.get(0).ok_or(format!("Token {:?} has no child[0]", token))?;
let child_answer = evaluate_node(child_node)?;
let named_number_value = lookup_named_number(named_number);
if let Token::NamedNumber(child_nn) = &child_node.token {
let child_nn_value = lookup_named_number(child_nn);
if child_nn_value > named_number_value {
return Err(format!("Unexpected smaller token {:?}", token));
}
}
let child_answer = evaluate_node(child_node)?;
let result = child_answer.value * named_number_value;
Ok(Number::new(result, child_answer.unit))
}