module DDC.Core.Salt.Name.PrimArith
( PrimArith (..)
, readPrimArith)
where
import DDC.Base.Pretty
import Control.DeepSeq
import Data.List
data PrimArith
= PrimArithNeg
| PrimArithAdd
| PrimArithSub
| PrimArithMul
| PrimArithDiv
| PrimArithMod
| PrimArithRem
| PrimArithEq
| PrimArithNeq
| PrimArithGt
| PrimArithGe
| PrimArithLt
| PrimArithLe
| PrimArithAnd
| PrimArithOr
| PrimArithShl
| PrimArithShr
| PrimArithBAnd
| PrimArithBOr
| PrimArithBXOr
deriving (Eq, Ord, Show)
instance NFData PrimArith
instance Pretty PrimArith where
ppr op
= let Just (_, n) = find (\(p, _) -> op == p) primArithNames
in (text n)
readPrimArith :: String -> Maybe PrimArith
readPrimArith str
= case find (\(_, n) -> str == n) primArithNames of
Just (p, _) -> Just p
_ -> Nothing
primArithNames :: [(PrimArith, String)]
primArithNames
= [ (PrimArithNeg, "neg#")
, (PrimArithAdd, "add#")
, (PrimArithSub, "sub#")
, (PrimArithMul, "mul#")
, (PrimArithDiv, "div#")
, (PrimArithRem, "rem#")
, (PrimArithMod, "mod#")
, (PrimArithEq , "eq#" )
, (PrimArithNeq, "neq#")
, (PrimArithGt , "gt#" )
, (PrimArithGe , "ge#" )
, (PrimArithLt , "lt#" )
, (PrimArithLe , "le#" )
, (PrimArithAnd, "and#")
, (PrimArithOr , "or#" )
, (PrimArithShl, "shl#")
, (PrimArithShr, "shr#")
, (PrimArithBAnd, "band#")
, (PrimArithBOr, "bor#")
, (PrimArithBXOr, "bxor#") ]