diff --git a/CHANGELOG.md b/CHANGELOG.md index 83ad86e..7545292 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/src/evaluator.rs b/src/evaluator.rs index c0ade25..7f4b306 100644 --- a/src/evaluator.rs +++ b/src/evaluator.rs @@ -221,8 +221,14 @@ fn evaluate_node(ast_node: &AstNode) -> Result { }, 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)) }