module Language.Bluespec.Classic.AST.IntLit
( IntLit(..)
, ilDec
, ilSizedDec
, ilHex
, ilSizedHex
, ilBin
, ilSizedBin
) where
import Text.PrettyPrint.HughesPJClass
import Language.Bluespec.IntegerUtil
import Language.Bluespec.Prelude
data IntLit = IntLit { IntLit -> Maybe Integer
ilWidth :: Maybe Integer,
IntLit -> Integer
ilBase :: Integer,
IntLit -> Integer
ilValue :: Integer }
instance Eq IntLit where
IntLit { ilValue :: IntLit -> Integer
ilValue = Integer
i1 } == :: IntLit -> IntLit -> Bool
== IntLit { ilValue :: IntLit -> Integer
ilValue = Integer
i2 } = Integer
i1 Integer -> Integer -> Bool
forall a. Eq a => a -> a -> Bool
== Integer
i2
IntLit { ilValue :: IntLit -> Integer
ilValue = Integer
i1 } /= :: IntLit -> IntLit -> Bool
/= IntLit { ilValue :: IntLit -> Integer
ilValue = Integer
i2 } = Integer
i1 Integer -> Integer -> Bool
forall a. Eq a => a -> a -> Bool
/= Integer
i2
instance Ord IntLit where
IntLit { ilValue :: IntLit -> Integer
ilValue = Integer
i1 } <= :: IntLit -> IntLit -> Bool
<= IntLit { ilValue :: IntLit -> Integer
ilValue = Integer
i2 } = Integer
i1 Integer -> Integer -> Bool
forall a. Ord a => a -> a -> Bool
<= Integer
i2
IntLit { ilValue :: IntLit -> Integer
ilValue = Integer
i1 } < :: IntLit -> IntLit -> Bool
< IntLit { ilValue :: IntLit -> Integer
ilValue = Integer
i2 } = Integer
i1 Integer -> Integer -> Bool
forall a. Ord a => a -> a -> Bool
< Integer
i2
IntLit { ilValue :: IntLit -> Integer
ilValue = Integer
i1 } >= :: IntLit -> IntLit -> Bool
>= IntLit { ilValue :: IntLit -> Integer
ilValue = Integer
i2 } = Integer
i1 Integer -> Integer -> Bool
forall a. Ord a => a -> a -> Bool
>= Integer
i2
IntLit { ilValue :: IntLit -> Integer
ilValue = Integer
i1 } > :: IntLit -> IntLit -> Bool
> IntLit { ilValue :: IntLit -> Integer
ilValue = Integer
i2 } = Integer
i1 Integer -> Integer -> Bool
forall a. Ord a => a -> a -> Bool
> Integer
i2
IntLit { ilValue :: IntLit -> Integer
ilValue = Integer
i1 } compare :: IntLit -> IntLit -> Ordering
`compare` IntLit { ilValue :: IntLit -> Integer
ilValue = Integer
i2 } = Integer
i1 Integer -> Integer -> Ordering
forall a. Ord a => a -> a -> Ordering
`compare` Integer
i2
instance Show IntLit where
showsPrec :: Int -> IntLit -> ShowS
showsPrec Int
_ (IntLit { ilValue :: IntLit -> Integer
ilValue = Integer
i, ilWidth :: IntLit -> Maybe Integer
ilWidth = Maybe Integer
_mw, ilBase :: IntLit -> Integer
ilBase = Integer
b }) String
s =
Integer -> Integer -> Integer -> String
integerFormatPref Integer
0 Integer
b Integer
i String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
s
instance Pretty IntLit where
pPrintPrec :: PrettyLevel -> Rational -> IntLit -> Doc
pPrintPrec PrettyLevel
_d Rational
_p IntLit
i = String -> Doc
text (IntLit -> String
forall a. Show a => a -> String
show IntLit
i)
ilDec :: Integer -> IntLit
ilDec :: Integer -> IntLit
ilDec Integer
i = IntLit { ilWidth :: Maybe Integer
ilWidth = Maybe Integer
forall a. Maybe a
Nothing, ilBase :: Integer
ilBase = Integer
10, ilValue :: Integer
ilValue = Integer
i }
ilSizedDec :: Integer -> Integer -> IntLit
ilSizedDec :: Integer -> Integer -> IntLit
ilSizedDec Integer
w Integer
i = IntLit { ilWidth :: Maybe Integer
ilWidth = Integer -> Maybe Integer
forall a. a -> Maybe a
Just Integer
w, ilBase :: Integer
ilBase = Integer
10, ilValue :: Integer
ilValue = Integer
i }
ilHex :: Integer -> IntLit
ilHex :: Integer -> IntLit
ilHex Integer
i = IntLit { ilWidth :: Maybe Integer
ilWidth = Maybe Integer
forall a. Maybe a
Nothing, ilBase :: Integer
ilBase = Integer
16, ilValue :: Integer
ilValue = Integer
i }
ilSizedHex :: Integer -> Integer -> IntLit
ilSizedHex :: Integer -> Integer -> IntLit
ilSizedHex Integer
w Integer
i = IntLit { ilWidth :: Maybe Integer
ilWidth = Integer -> Maybe Integer
forall a. a -> Maybe a
Just Integer
w, ilBase :: Integer
ilBase = Integer
16, ilValue :: Integer
ilValue = Integer
i }
ilBin :: Integer -> IntLit
ilBin :: Integer -> IntLit
ilBin Integer
i = IntLit { ilWidth :: Maybe Integer
ilWidth = Maybe Integer
forall a. Maybe a
Nothing, ilBase :: Integer
ilBase = Integer
2, ilValue :: Integer
ilValue = Integer
i }
ilSizedBin :: Integer -> Integer -> IntLit
ilSizedBin :: Integer -> Integer -> IntLit
ilSizedBin Integer
w Integer
i = IntLit { ilWidth :: Maybe Integer
ilWidth = Integer -> Maybe Integer
forall a. a -> Maybe a
Just Integer
w, ilBase :: Integer
ilBase = Integer
2, ilValue :: Integer
ilValue = Integer
i }