module Synthesizer.LLVM.Private where import qualified LLVM.Extra.MaybeContinuation as MaybeCont import qualified LLVM.Extra.Multi.Value as MultiValue import qualified LLVM.Core as LLVM import qualified Type.Data.Num.Decimal as TypeNum import Control.Applicative (liftA2) unbool :: MultiValue.T Bool -> LLVM.Value Bool unbool (MultiValue.Cons b) = b noLocalPtr :: f -> (LLVM.Value (LLVM.Ptr (LLVM.Struct ())) -> f) noLocalPtr = const getPairPtrs :: 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, ()))