module Utils where
import Control.Monad.Trans.State
+import Data.ByteString.Short (ShortByteString)
import Data.Functor.Identity
import LLVM.AST
import LLVM.IRBuilder.Module
import LLVM.IRBuilder.Internal.SnocList
+moduleSoFar :: MonadModuleBuilder m => ShortByteString -> m Module
+moduleSoFar nm = do
+ s <- liftModuleState get
+ let ds = getSnocList (builderDefs s)
+ return $ defaultModule { moduleName = nm, moduleDefinitions = ds }
+
mostRecentDef :: Monad m => ModuleBuilderT m Definition
mostRecentDef = last . getSnocList . builderDefs <$> liftModuleState get