packages feed

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)