summaryrefslogtreecommitdiff
path: root/src/types
diff options
context:
space:
mode:
authorBen Bridle <ben@derelict.engineering>2025-10-15 11:01:13 +1300
committerBen Bridle <ben@derelict.engineering>2025-10-15 11:01:13 +1300
commitdc6653aadf984af3bdd3ef45124bcee609dc52bc (patch)
tree56a7dd31a26a93a3308c08eb483745208ea14260 /src/types
parentd9e0c4895608cdcb04b868222b49b3f117766ed0 (diff)
downloadtorque-asm-dc6653aadf984af3bdd3ef45124bcee609dc52bc.zip
Fix panic caused by dividing by zero in an expression
Diffstat (limited to 'src/types')
-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) {