hLLVM-0.5.0.0: src/Llvm/Data/Type.hs
module Llvm.Data.Type
(module Llvm.Data.Type
,module Llvm.Data.Shared.AtomicEntity
)
where
import Llvm.Data.Shared.AtomicEntity hiding (AddrSpace(..))
import Data.Word (Word32)
data TypePrimitive = TpI Word32
| TpF Word32
| TpV Word32
| TpHalf | TpFloat | TpDouble | TpFp128 | TpX86Fp80 | TpPpcFp128
| TpX86Mmx
| TpNull
| TpLabel
deriving (Eq,Ord,Show)
splitCallReturnType :: Type -> (Type, Maybe (Type, AddrSpace))
splitCallReturnType (Tpointer f@(Tfunction rt _ _) as) = (rt, Just (f, as))
splitCallReturnType x = (x, Nothing)
data Type = Tprimitive TypePrimitive
| Topaque
| Tname String
| TquoteName String
| Tno Word32
| Tarray Word32 Type
| Tvector Word32 Type
| Tstruct Packing [Type]
| Tpointer Type AddrSpace
| Tfunction Type TypeParamList [FunAttr]
| Tvoid
-- | deref a type will strip off Tpointer, this is a syntatical
-- | representation that should be evaluated later.
-- | Tderef Type
deriving (Eq,Ord,Show)
data MetaKind = Mtype Type
| Mmetadata
deriving (Eq, Ord, Show)
data FormalParam = FormalParamData Type [ParamAttr] (Maybe Alignment) Fparam [ParamAttr]
| FormalParamMeta MetaKind Fparam
deriving (Eq,Ord,Show)
data FormalParamList = FormalParamList [FormalParam] (Maybe VarArgParam) [FunAttr] deriving (Eq,Ord,Show)
data TypeParamList = TypeParamList [Type] (Maybe VarArgParam) deriving (Eq,Ord,Show)
data AddrSpace = AddrSpace Word32
| AddrSpaceUnspecified deriving (Eq,Ord,Show)