summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/types/expression_stack.rs14
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) {