Skip to content

Commit

Permalink
Merge pull request #448 from schungx/bug-fixes
Browse files Browse the repository at this point in the history
Bug fixes
  • Loading branch information
schungx authored Sep 19, 2021
2 parents 5cc1fd1 + 661d00b commit 4ed757d
Show file tree
Hide file tree
Showing 7 changed files with 46 additions and 22 deletions.
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,16 @@
Rhai Release Notes
==================

Version 1.0.5
=============

Bug fixes
---------

* `FloatWrapper` is no longer erroneously exported under `no_float+internals`.
* The `sign` function now works properly for float values that are `NaN`.


Version 1.0.4
=============

Expand Down
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ members = [".", "codegen"]

[package]
name = "rhai"
version = "1.0.3"
version = "1.0.5"
edition = "2018"
authors = ["Jonathan Turner", "Lukáš Hozda", "Stephen Chung", "jhwgh1968"]
description = "Embedded scripting for Rust"
Expand Down
5 changes: 4 additions & 1 deletion codegen/ui_tests/rhai_fn_non_clonable_return.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@ error[E0277]: the trait bound `NonClonable: Clone` is not satisfied
--> $DIR/rhai_fn_non_clonable_return.rs:11:8
|
11 | pub fn test_fn(input: f32) -> NonClonable {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Clone` is not implemented for `NonClonable`
| ^^^^^^^^^^^^^^^^^^^^^^^-----------
| | |
| | required by a bound introduced by this call
| the trait `Clone` is not implemented for `NonClonable`
|
note: required by a bound in `rhai::Dynamic::from`
--> $DIR/dynamic.rs:1043:30
Expand Down
5 changes: 4 additions & 1 deletion codegen/ui_tests/rhai_mod_non_clonable_return.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@ error[E0277]: the trait bound `NonClonable: Clone` is not satisfied
--> $DIR/rhai_mod_non_clonable_return.rs:12:12
|
12 | pub fn test_fn(input: f32) -> NonClonable {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Clone` is not implemented for `NonClonable`
| ^^^^^^^^^^^^^^^^^^^^^^^-----------
| | |
| | required by a bound introduced by this call
| the trait `Clone` is not implemented for `NonClonable`
|
note: required by a bound in `rhai::Dynamic::from`
--> $DIR/dynamic.rs:1043:30
Expand Down
9 changes: 7 additions & 2 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -227,10 +227,15 @@ pub use token::{InputStream, Token, TokenizeState, TokenizerControl, TokenizerCo
#[cfg(feature = "internals")]
#[deprecated = "this type is volatile and may change"]
pub use ast::{
ASTNode, BinaryExpr, CustomExpr, Expr, FloatWrapper, FnCallExpr, FnCallHashes, Ident,
OpAssignment, OptionFlags, ReturnType, ScriptFnDef, Stmt, StmtBlock, AST_OPTION_FLAGS::*,
ASTNode, BinaryExpr, CustomExpr, Expr, FnCallExpr, FnCallHashes, Ident, OpAssignment,
OptionFlags, ReturnType, ScriptFnDef, Stmt, StmtBlock, AST_OPTION_FLAGS::*,
};

#[cfg(feature = "internals")]
#[cfg(not(feature = "no_float"))]
#[deprecated = "this type is volatile and may change"]
pub use ast::FloatWrapper;

#[cfg(feature = "internals")]
#[deprecated = "this type is volatile and may change"]
pub use engine::{EvalState, FnResolutionCache, FnResolutionCacheEntry, Imports};
Expand Down
34 changes: 17 additions & 17 deletions src/packages/arithmetic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -163,13 +163,7 @@ macro_rules! gen_signed_functions {
}
}
pub fn sign(x: $arg_type) -> INT {
if x == 0 {
0
} else if x < 0 {
-1
} else {
1
}
x.signum() as INT
}
}
})* }
Expand Down Expand Up @@ -249,6 +243,8 @@ gen_signed_functions!(signed_num_128 => i128);
#[cfg(not(feature = "no_float"))]
#[export_module]
mod f32_functions {
use crate::EvalAltResult;

#[cfg(not(feature = "f32_float"))]
pub mod basic_arithmetic {
#[rhai_fn(name = "+")]
Expand Down Expand Up @@ -329,13 +325,15 @@ mod f32_functions {
pub fn abs(x: f32) -> f32 {
x.abs()
}
pub fn sign(x: f32) -> INT {
#[rhai_fn(return_raw)]
pub fn sign(x: f32) -> Result<INT, Box<EvalAltResult>> {
if x == 0.0 {
0
} else if x < 0.0 {
-1
Ok(0)
} else {
1
match x.signum() {
x if x.is_nan() => Err(make_err("Sign of NaN is undefined")),
x => Ok(x as INT),
}
}
}
pub fn is_zero(x: f32) -> bool {
Expand Down Expand Up @@ -437,13 +435,15 @@ mod f64_functions {
pub fn abs(x: f64) -> f64 {
x.abs()
}
pub fn sign(x: f64) -> INT {
#[rhai_fn(return_raw)]
pub fn sign(x: f64) -> Result<INT, Box<EvalAltResult>> {
if x == 0.0 {
0
} else if x < 0.0 {
-1
Ok(0)
} else {
1
match x.signum() {
x if x.is_nan() => Err(make_err("Sign of NaN is undefined")),
x => Ok(x as INT),
}
}
}
pub fn is_zero(x: f64) -> bool {
Expand Down
3 changes: 3 additions & 0 deletions src/scope.rs
Original file line number Diff line number Diff line change
Expand Up @@ -397,6 +397,9 @@ impl<'a> Scope<'a> {
/// *ptr = 123_i64.into();
///
/// assert_eq!(my_scope.get_value::<i64>("x").unwrap(), 123);
///
/// my_scope.push_constant("Z", 1_i64);
/// assert!(my_scope.get_mut("Z").is_none());
/// ```
#[inline]
#[must_use]
Expand Down

0 comments on commit 4ed757d

Please sign in to comment.