From df1cfea8342cb923d892cf9ab1a743050977b701 Mon Sep 17 00:00:00 2001 From: Torben Ewert Date: Sun, 14 Apr 2024 19:06:01 +0200 Subject: [PATCH] define division and modulo by 0 to be 0 --- lib/pinc_backend/Interpreter.ml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/pinc_backend/Interpreter.ml b/lib/pinc_backend/Interpreter.ml index c4ebbe5..fd0ef53 100644 --- a/lib/pinc_backend/Interpreter.ml +++ b/lib/pinc_backend/Interpreter.ml @@ -538,8 +538,7 @@ and eval_binary_div ~state left right = let merged_value_loc = Location.merge ~s:a.value_loc ~e:b.value_loc () in let r = match (a.value_desc, b.value_desc) with - | Int _, Int 0 | Float _, Float 0. | Float _, Int 0 | Int _, Float 0. -> - Pinc_Diagnostics.error b.value_loc "Trying to divide by 0" + | Int _, Int 0 | Float _, Float 0. | Float _, Int 0 | Int _, Float 0. -> 0. | Int a, Int b -> float_of_int a /. float_of_int b | Float a, Float b -> a /. b | Float a, Int b -> a /. float_of_int b @@ -588,8 +587,7 @@ and eval_binary_modulo ~state left right = let merged_value_loc = Location.merge ~s:a.value_loc ~e:b.value_loc () in let r = match (a.value_desc, b.value_desc) with - | Int _, Int 0 | Int _, Float 0. | Float _, Float 0. | Float _, Int 0 -> - Pinc_Diagnostics.error b.value_loc "Trying to modulo with 0 on right hand side." + | Int _, Int 0 | Int _, Float 0. | Float _, Float 0. | Float _, Int 0 -> 0. | Int a, Int b -> float_of_int (a % b) | Float a, Float b -> a -. (a /. b *. b) | Float a, Int 1 -> fst (Float.modf a)