module Language.Copilot.Libs.ErrorChks(nOneChk, nPosChk, int16Chk) where
import Data.Int (Int16)
import Language.Copilot.Core
chk :: String -> Int -> Spec a -> Int -> Spec a
chk name n s m =
if n < m
then error $ "Value " ++ show n ++ " in operator " ++ name
++ " must be greater than or equal to " ++ show m ++ "."
else s
nPosChk :: String -> Int -> Spec a -> Spec a
nPosChk name n s = chk name n s 0
nOneChk :: String -> Int -> Spec a -> Spec a
nOneChk name n s = chk name n s 1
int16Chk :: String -> Int -> Spec a -> Spec a
int16Chk name n s =
if (toInteger n) > maxVal
then error $ "Offset " ++ show n ++ " in operator " ++ name
++ " is larger than the Int16 maxBound, " ++ show maxVal ++ "."
else s
where maxVal = toInteger (maxBound::Int16)