diff --git a/CHANGELOG.md b/CHANGELOG.md index bff3b748..89400e17 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,17 @@ Rhai Release Notes ================== -Version 0.19.16 -=============== +Version 0.20.1 +============== + + +Version 0.20.0 +============== This version adds string interpolation with `` `... ${`` ... ``} ...` `` syntax. +`switch` statement cases can now have conditions. + Negative indices for arrays and strings are allowed and now count from the end (-1 = last item/character). Bug fixes diff --git a/Cargo.toml b/Cargo.toml index 90100ff3..c9f5166b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ members = [".", "codegen"] [package] name = "rhai" -version = "0.19.16" +version = "0.20.1" edition = "2018" authors = ["Jonathan Turner", "Lukáš Hozda", "Stephen Chung", "jhwgh1968"] description = "Embedded scripting for Rust" diff --git a/codegen/Cargo.toml b/codegen/Cargo.toml index e24f866c..d02e4388 100644 --- a/codegen/Cargo.toml +++ b/codegen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rhai_codegen" -version = "0.3.4" +version = "0.3.5" edition = "2018" authors = ["jhwgh1968"] description = "Procedural macro support package for Rhai, a scripting language for Rust" @@ -16,7 +16,7 @@ default = [] metadata = [] [dev-dependencies] -rhai = { path = "..", version = "0.19" } +rhai = { path = "..", version = ">=0.19.15" } trybuild = "1" [dependencies] diff --git a/src/parser.rs b/src/parser.rs index d376d7f2..6169657c 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -1328,7 +1328,7 @@ fn parse_unary( match parse_unary(input, state, lib, settings.level_up())? { // Negative integer - Expr::IntegerConstant(num, pos) => num + Expr::IntegerConstant(num, _) => num .checked_neg() .map(|i| Expr::IntegerConstant(i, pos)) .or_else(|| { @@ -1341,7 +1341,7 @@ fn parse_unary( // Negative float #[cfg(not(feature = "no_float"))] - Expr::FloatConstant(x, pos) => Ok(Expr::FloatConstant((-(*x)).into(), pos)), + Expr::FloatConstant(x, _) => Ok(Expr::FloatConstant((-(*x)).into(), pos)), // Call negative function expr => { diff --git a/src/token.rs b/src/token.rs index d12831ca..a035d278 100644 --- a/src/token.rs +++ b/src/token.rs @@ -1240,7 +1240,7 @@ fn get_next_token_inner( ); } - let mut negated = false; + let mut negated_pos = Position::NONE; while let Some(c) = stream.get_next() { pos.advance(); @@ -1349,9 +1349,12 @@ fn get_next_token_inner( } } - if negated { + let num_pos = if !negated_pos.is_none() { result.insert(0, '-'); - } + negated_pos + } else { + start_pos + }; // Parse number return Some(( @@ -1388,7 +1391,7 @@ fn get_next_token_inner( Token::LexError(LERR::MalformedNumber(result.into_iter().collect())) }) }, - start_pos, + num_pos, )); } @@ -1507,7 +1510,7 @@ fn get_next_token_inner( ('+', _) if !state.non_unary => return Some((Token::UnaryPlus, start_pos)), ('+', _) => return Some((Token::Plus, start_pos)), - ('-', '0'..='9') if !state.non_unary => negated = true, + ('-', '0'..='9') if !state.non_unary => negated_pos = start_pos, ('-', '0'..='9') => return Some((Token::Minus, start_pos)), ('-', '=') => { eat_next(stream, pos);