From 714b8a936a7c1c1bb39f85413fc3b8907b56b6f3 Mon Sep 17 00:00:00 2001 From: hellerve Date: Tue, 30 May 2017 05:15:55 -0400 Subject: [PATCH] eval: added % --- src/BC/Eval.hs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/BC/Eval.hs b/src/BC/Eval.hs index f79c843..1ff0c24 100644 --- a/src/BC/Eval.hs +++ b/src/BC/Eval.hs @@ -1,5 +1,6 @@ module BC.Eval (eval) where +import Data.Fixed (mod') import qualified Data.HashMap as M import BC.State @@ -116,9 +117,17 @@ binOp "/" = Just (/) binOp "+" = Just (+) binOp "-" = Just ( - ) binOp "^" = Just (**) +binOp "%" = Just ownMod binOp _ = Nothing +ownMod :: Number -> Number -> Number +ownMod (BInt x) (BInt y) = BInt $ mod x y +ownMod (BInt x) (BFloat y) = BFloat $ mod' (fromIntegral x) y +ownMod (BFloat x) (BInt y) = BFloat $ mod' x (fromIntegral y) +ownMod (BFloat x) (BFloat y) = BFloat $ mod' x y + + funCall :: State -> Value -> [[Value]] -> (Value, State) funCall state (BFun name args body) provided = if length args == length provided