diff --git a/src/engine.rs b/src/engine.rs index 276ce86c..a96bae7b 100644 --- a/src/engine.rs +++ b/src/engine.rs @@ -18,10 +18,7 @@ use crate::utils::StaticVec; use crate::parser::FLOAT; #[cfg(not(feature = "no_module"))] -use crate::module::{resolvers, ModuleRef, ModuleResolver}; - -#[cfg(feature = "no_module")] -use crate::parser::ModuleRef; +use crate::module::{resolvers, ModuleResolver}; use crate::stdlib::{ any::TypeId, @@ -30,7 +27,6 @@ use crate::stdlib::{ format, iter::{empty, once}, mem, - num::NonZeroUsize, ops::{Deref, DerefMut}, string::{String, ToString}, vec::Vec, @@ -2186,6 +2182,14 @@ fn run_builtin_op_assignment( "|=" => return Ok(Some(*x = *x || y)), _ => (), } + } else if args_type == TypeId::of::() { + let x = x.downcast_mut::().unwrap(); + let y = y.downcast_ref::().unwrap(); + + match op { + "+=" => return Ok(Some(*x += y)), + _ => (), + } } #[cfg(not(feature = "no_float"))] diff --git a/src/packages/string_basic.rs b/src/packages/string_basic.rs index ad51e02c..262a4f3a 100644 --- a/src/packages/string_basic.rs +++ b/src/packages/string_basic.rs @@ -81,6 +81,5 @@ def_package!(crate:BasicStringPackage:"Basic string utilities, including printin lib.set_fn_2("+", |s: ImmutableString, ch: char| Ok(s + ch)); lib.set_fn_2_mut("+=", |s: &mut ImmutableString, ch: char| { *s += ch; Ok(()) }); lib.set_fn_2_mut("append", |s: &mut ImmutableString, ch: char| { *s += ch; Ok(()) }); - lib.set_fn_2_mut("+=", |s: &mut ImmutableString, s2: ImmutableString| { *s += &s2; Ok(()) }); lib.set_fn_2_mut("append", |s: &mut ImmutableString, s2: ImmutableString| { *s += &s2; Ok(()) }); });