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 :: T Bool -> Value Bool unbool (MultiValue.Cons Repr Bool b) = Repr Bool Value Bool b noLocalPtr :: f -> (LLVM.Value (LLVM.Ptr (LLVM.Struct ())) -> f) noLocalPtr :: forall f. f -> Value (Ptr (Struct ())) -> f noLocalPtr = f -> Value (Ptr (Struct ())) -> f forall a b. a -> b -> a 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 :: forall a b r c. Value (Ptr (Struct (a, (b, ())))) -> T r c (Value (Ptr a), Value (Ptr b)) getPairPtrs Value (Ptr (Struct (a, (b, ())))) ptr = CodeGenFunction r (Value (Ptr a), Value (Ptr b)) -> T r c (Value (Ptr a), Value (Ptr b)) forall r a z. CodeGenFunction r a -> T r z a MaybeCont.lift (CodeGenFunction r (Value (Ptr a), Value (Ptr b)) -> T r c (Value (Ptr a), Value (Ptr b))) -> CodeGenFunction r (Value (Ptr a), Value (Ptr b)) -> T r c (Value (Ptr a), Value (Ptr b)) forall a b. (a -> b) -> a -> b $ (Value (Ptr a) -> Value (Ptr b) -> (Value (Ptr a), Value (Ptr b))) -> CodeGenFunction r (Value (Ptr a)) -> CodeGenFunction r (Value (Ptr b)) -> CodeGenFunction r (Value (Ptr a), Value (Ptr b)) forall a b c. (a -> b -> c) -> CodeGenFunction r a -> CodeGenFunction r b -> CodeGenFunction r c forall (f :: * -> *) a b c. Applicative f => (a -> b -> c) -> f a -> f b -> f c liftA2 (,) (Value (Ptr (Struct (a, (b, ())))) -> (Proxy D0, ()) -> CodeGenFunction r (Value (Ptr (ElementPtrType (Struct (a, (b, ()))) (Proxy D0, ())))) forall o i r. GetElementPtr o i => Value (Ptr o) -> i -> CodeGenFunction r (Value (Ptr (ElementPtrType o i))) LLVM.getElementPtr0 Value (Ptr (Struct (a, (b, ())))) ptr (Proxy D0 TypeNum.d0, ())) (Value (Ptr (Struct (a, (b, ())))) -> (Proxy D1, ()) -> CodeGenFunction r (Value (Ptr (ElementPtrType (Struct (a, (b, ()))) (Proxy D1, ())))) forall o i r. GetElementPtr o i => Value (Ptr o) -> i -> CodeGenFunction r (Value (Ptr (ElementPtrType o i))) LLVM.getElementPtr0 Value (Ptr (Struct (a, (b, ())))) ptr (Proxy D1 TypeNum.d1, ()))