module LLVM.DSL.Debug.StablePtr where

import Foreign.StablePtr (StablePtr, castStablePtrToPtr)
import Control.Monad (when)


{-# INLINE trace #-}
trace :: String -> StablePtr a -> IO (StablePtr a)
trace :: forall a. String -> StablePtr a -> IO (StablePtr a)
trace String
name StablePtr a
s = do
   Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when Bool
False (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
      String -> IO ()
putStrLn (String -> IO ()) -> String -> IO ()
forall a b. (a -> b) -> a -> b
$ String
"EventIterator." String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
name String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
": " String -> String -> String
forall a. [a] -> [a] -> [a]
++ (Ptr () -> String
forall a. Show a => a -> String
show (Ptr () -> String) -> Ptr () -> String
forall a b. (a -> b) -> a -> b
$ StablePtr a -> Ptr ()
forall a. StablePtr a -> Ptr ()
castStablePtrToPtr (StablePtr a -> Ptr ()) -> StablePtr a -> Ptr ()
forall a b. (a -> b) -> a -> b
$ StablePtr a
s)
   StablePtr a -> IO (StablePtr a)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return StablePtr a
s