module LLVM.Internal.DataLayout where import LLVM.Prelude import Control.Exception import Control.Monad.AnyCont import Control.Monad.IO.Class import Foreign.Ptr import qualified LLVM.Internal.FFI.DataLayout as FFI import LLVM.AST.DataLayout import LLVM.DataLayout import LLVM.Internal.Coding import LLVM.Internal.String () withFFIDataLayout :: DataLayout -> (Ptr FFI.DataLayout -> IO a) -> IO a withFFIDataLayout :: DataLayout -> (Ptr DataLayout -> IO a) -> IO a withFFIDataLayout dl :: DataLayout dl f :: Ptr DataLayout -> IO a f = (AnyContT IO a -> (a -> IO a) -> IO a) -> (a -> IO a) -> AnyContT IO a -> IO a forall a b c. (a -> b -> c) -> b -> a -> c flip AnyContT IO a -> (a -> IO a) -> IO a forall (m :: * -> *) a. AnyContT m a -> forall r. (a -> m r) -> m r runAnyContT a -> IO a forall (m :: * -> *) a. Monad m => a -> m a return (AnyContT IO a -> IO a) -> AnyContT IO a -> IO a forall a b. (a -> b) -> a -> b $ do CString dls <- ByteString -> AnyContT IO CString forall (e :: * -> *) h c. EncodeM e h c => h -> e c encodeM (DataLayout -> ByteString dataLayoutToString DataLayout dl) IO a -> AnyContT IO a forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO (IO a -> AnyContT IO a) -> IO a -> AnyContT IO a forall a b. (a -> b) -> a -> b $ IO (Ptr DataLayout) -> (Ptr DataLayout -> IO ()) -> (Ptr DataLayout -> IO a) -> IO a forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c bracket (CString -> IO (Ptr DataLayout) FFI.createDataLayout CString dls) Ptr DataLayout -> IO () FFI.disposeDataLayout Ptr DataLayout -> IO a f