Allow stacking ! operators.

This commit is contained in:
Stephen Chung 2021-01-24 21:21:15 +08:00
parent 049f472ac9
commit c245fe88fd
5 changed files with 8 additions and 7 deletions

View File

@ -17,9 +17,10 @@ license = "MIT OR Apache-2.0"
include = [
"**/*.rs",
"scripts/*.rhai",
"**/*.md",
"Cargo.toml"
]
keywords = [ "scripting" ]
keywords = [ "scripting", "scripting-engine", "scripting language", "embedded" ]
categories = [ "no-std", "embedded", "wasm", "parser-implementations" ]
[dependencies]

View File

@ -19,6 +19,7 @@ Bug fixes
* Parameters passed to plugin module functions were sometimes erroneously consumed. This is now fixed.
* Fixes compilation errors in `metadata` feature build.
* Stacking `!` operators now work properly.
New features
------------

View File

@ -1338,7 +1338,7 @@ fn parse_unary(
Token::Bang => {
let pos = eat_token(input, Token::Bang);
let mut args = StaticVec::new();
let expr = parse_primary(input, state, lib, settings.level_up())?;
let expr = parse_unary(input, state, lib, settings.level_up())?;
args.push(expr);
let op = "!";

View File

@ -12,8 +12,7 @@ fn test_not() -> Result<(), Box<EvalAltResult>> {
#[cfg(not(feature = "no_function"))]
assert_eq!(engine.eval::<bool>("fn not(x) { !x } not(false)")?, true);
// TODO - do we allow stacking unary operators directly? e.g '!!!!!!!true'
assert_eq!(engine.eval::<bool>("!(!(!(!(true))))")?, true);
assert_eq!(engine.eval::<bool>("!!!!true")?, true);
Ok(())
}