module DDC.Llvm.Syntax.Function
        ( Section       (..)
        , Function      (..))
where
import DDC.Llvm.Syntax.Instr
import DDC.Llvm.Syntax.Type
import DDC.Llvm.Syntax.Attr


-- | A LLVM Function
data Function
        = Function 
        { -- | The signature of this declared function.
          funDecl          :: FunctionDecl

          -- | The function parameter names.
        , funParams        :: [String]

          -- | The function attributes.
        , funAttrs         :: [FuncAttr]

          -- | The section to put the function into,
        , funSection       :: Section

          -- | The body of the functions.
        , funBlocks        :: [Block]
        }


-- | The section name to put the function in.
data Section
        -- | Let the LLVM decide what section to put this in.
        = SectionAuto

        -- | Put it in this specific section.
        | SectionSpecific String
        deriving (Eq, Show)