diff --git a/src/func/builtin.rs b/src/func/builtin.rs index 10fc8831..5294882a 100644 --- a/src/func/builtin.rs +++ b/src/func/builtin.rs @@ -183,16 +183,8 @@ pub fn get_builtin_binary_op_fn(op: Token, x: &Dynamic, y: &Dynamic) -> Option Some(impl_op!(INT => as_int & as_int)), Pipe => Some(impl_op!(INT => as_int | as_int)), XOr => Some(impl_op!(INT => as_int ^ as_int)), - ExclusiveRange => Some(|_, args| { - let x = args[0].as_int().expect(BUILTIN); - let y = args[1].as_int().expect(BUILTIN); - Ok((x..y).into()) - }), - InclusiveRange => Some(|_, args| { - let x = args[0].as_int().expect(BUILTIN); - let y = args[1].as_int().expect(BUILTIN); - Ok((x..=y).into()) - }), + ExclusiveRange => Some(impl_op!(INT => as_int .. as_int)), + InclusiveRange => Some(impl_op!(INT => as_int ..= as_int)), _ => None, }; } @@ -219,11 +211,8 @@ pub fn get_builtin_binary_op_fn(op: Token, x: &Dynamic, y: &Dynamic) -> Option().expect(BUILTIN); #[cfg(not(feature = "unchecked"))] - if !s1.is_empty() && !s2.is_empty() { - let total_len = s1.len() + s2.len(); - _ctx.engine() - .raise_err_if_over_data_size_limit((0, 0, total_len))?; - } + _ctx.engine() + .raise_err_if_over_data_size_limit((0, 0, s1.len() + s2.len()))?; Ok((s1 + s2).into()) }), @@ -270,25 +259,22 @@ pub fn get_builtin_binary_op_fn(op: Token, x: &Dynamic, y: &Dynamic) -> Option Some(|_ctx, args| { - let blob1 = &*args[0].read_lock::().expect(BUILTIN); - let blob2 = &*args[1].read_lock::().expect(BUILTIN); + let b2 = &*args[1].read_lock::().expect(BUILTIN); + if b2.is_empty() { + return Ok(args[0].flatten_clone()); + } + let b1 = &*args[0].read_lock::().expect(BUILTIN); + if b1.is_empty() { + return Ok(args[1].flatten_clone()); + } - Ok(Dynamic::from_blob(if blob2.is_empty() { - blob1.clone() - } else if blob1.is_empty() { - blob2.clone() - } else { - #[cfg(not(feature = "unchecked"))] - _ctx.engine().raise_err_if_over_data_size_limit(( - blob1.len() + blob2.len(), - 0, - 0, - ))?; + #[cfg(not(feature = "unchecked"))] + _ctx.engine() + .raise_err_if_over_data_size_limit((b1.len() + b2.len(), 0, 0))?; - let mut blob = blob1.clone(); - blob.extend(blob2); - blob - })) + let mut blob = b1.clone(); + blob.extend(b2); + Ok(Dynamic::from_blob(blob)) }), EqualsTo => Some(impl_op!(Blob == Blob)), NotEqualsTo => Some(impl_op!(Blob != Blob)),