diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/types/expression_stack.rs | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/types/expression_stack.rs b/src/types/expression_stack.rs index 16ce0a0..25710d2 100644 --- a/src/types/expression_stack.rs +++ b/src/types/expression_stack.rs @@ -129,9 +129,19 @@ fn op_subtract(l: IntermediateValue, r: IntermediateValue) -> Result<Intermediat fn op_multiply(l: IntermediateValue, r: IntermediateValue) -> Result<IntermediateValue, ExpressionError> { Ok(from_isize(to_isize(l)? * to_isize(r)?)) } fn op_divide(l: IntermediateValue, r: IntermediateValue) -> Result<IntermediateValue, ExpressionError> { - Ok(from_isize(to_isize(l)? / to_isize(r)?)) } + let l = to_isize(l)?; let r = to_isize(r)?; + match r != 0 { + true => Ok(from_isize(l / r)), + false => Ok(from_isize(0)), + } +} fn op_modulo(l: IntermediateValue, r: IntermediateValue) -> Result<IntermediateValue, ExpressionError> { - Ok(from_isize(to_isize(l)? % to_isize(r)?)) } + let l = to_isize(l)?; let r = to_isize(r)?; + match r != 0 { + true => Ok(from_isize(l % r)), + false => Ok(from_isize(0)), + } +} fn op_exponent(l: IntermediateValue, r: IntermediateValue) -> Result<IntermediateValue, ExpressionError> { let l = to_isize(l)?; let r = to_isize(r)?; if let Ok(r) = u32::try_from(r) { |