packages feed

synthesizer-llvm-1.2: src/Synthesizer/LLVM/Private.hs

module Synthesizer.LLVM.Private where

import qualified LLVM.Extra.MaybeContinuation as MaybeCont
import qualified LLVM.Extra.Nice.Value as NiceValue

import qualified LLVM.Core as LLVM

import qualified Type.Data.Num.Decimal as TypeNum

import Control.Applicative (liftA2)


unbool :: NiceValue.T Bool -> LLVM.Value Bool
unbool (NiceValue.Cons b) = b

noLocalPtr :: f -> (LLVM.Value (LLVM.Ptr (LLVM.Struct ())) -> f)
noLocalPtr = const

getPairPtrs ::
   (LLVM.IsSized a, LLVM.IsSized b) =>
   LLVM.Value (LLVM.Ptr (LLVM.Struct (a, (b, ())))) ->
   MaybeCont.T r c (LLVM.Value (LLVM.Ptr a), LLVM.Value (LLVM.Ptr b))
getPairPtrs ptr =
   MaybeCont.lift $
   liftA2 (,)
      (LLVM.getElementPtr0 ptr (TypeNum.d0, ()))
      (LLVM.getElementPtr0 ptr (TypeNum.d1, ()))