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 :: forall a. DataLayout -> (Ptr DataLayout -> IO a) -> IO a withFFIDataLayout DataLayout dl Ptr DataLayout -> IO a f = (a -> IO a) -> AnyContT IO a -> IO a forall a (m :: * -> *) r. (a -> m r) -> AnyContT m a -> m r runAnyContT' a -> IO a forall a. 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, HasCallStack) => h -> e c encodeM (DataLayout -> ByteString dataLayoutToString DataLayout dl) IO a -> AnyContT IO a forall a. 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