Fix decimal and no_std builds.

This commit is contained in:
Stephen Chung 2021-03-03 13:34:29 +08:00
parent 77277ebf37
commit 58df3ca141
3 changed files with 14 additions and 9 deletions

View File

@ -1447,9 +1447,9 @@ impl Dynamic {
/// Exported under the `decimal` feature only. /// Exported under the `decimal` feature only.
#[cfg(feature = "decimal")] #[cfg(feature = "decimal")]
#[inline(always)] #[inline(always)]
pub fn as_decimal(self) -> Result<Decimal, &'static str> { pub fn as_decimal(&self) -> Result<Decimal, &'static str> {
match self.0 { match &self.0 {
Union::Decimal(n, _) => Ok(*n), Union::Decimal(n, _) => Ok(**n),
#[cfg(not(feature = "no_closure"))] #[cfg(not(feature = "no_closure"))]
Union::Shared(_, _) => self.read_lock().map(|v| *v).ok_or_else(|| self.type_name()), Union::Shared(_, _) => self.read_lock().map(|v| *v).ok_or_else(|| self.type_name()),
_ => Err(self.type_name()), _ => Err(self.type_name()),

View File

@ -946,27 +946,32 @@ pub fn get_builtin_op_assignment_fn(
match op { match op {
"+=" => { "+=" => {
return Some(|_, args| { return Some(|_, args| {
Ok((*args[0].write_lock::<Decimal>().unwrap() += get_y(args)).into()) let y = get_y(args);
Ok((*args[0].write_lock::<Decimal>().unwrap() += y).into())
}) })
} }
"-=" => { "-=" => {
return Some(|_, args| { return Some(|_, args| {
Ok((*args[0].write_lock::<Decimal>().unwrap() -= get_y(args)).into()) let y = get_y(args);
Ok((*args[0].write_lock::<Decimal>().unwrap() -= y).into())
}) })
} }
"*=" => { "*=" => {
return Some(|_, args| { return Some(|_, args| {
Ok((*args[0].write_lock::<Decimal>().unwrap() *= get_y(args)).into()) let y = get_y(args);
Ok((*args[0].write_lock::<Decimal>().unwrap() *= y).into())
}) })
} }
"/=" => { "/=" => {
return Some(|_, args| { return Some(|_, args| {
Ok((*args[0].write_lock::<Decimal>().unwrap() /= get_y(args)).into()) let y = get_y(args);
Ok((*args[0].write_lock::<Decimal>().unwrap() /= y).into())
}) })
} }
"%=" => { "%=" => {
return Some(|_, args| { return Some(|_, args| {
Ok((*args[0].write_lock::<Decimal>().unwrap() %= get_y(args)).into()) let y = get_y(args);
Ok((*args[0].write_lock::<Decimal>().unwrap() %= y).into())
}) })
} }
_ => return None, _ => return None,

View File

@ -88,7 +88,7 @@ mod token;
mod r#unsafe; mod r#unsafe;
mod utils; mod utils;
pub type RhaiResult = Result<Dynamic, Box<EvalAltResult>>; pub type RhaiResult = Result<Dynamic, stdlib::boxed::Box<EvalAltResult>>;
/// The system integer type. It is defined as [`i64`]. /// The system integer type. It is defined as [`i64`].
/// ///