import Control.Monad.Trans.State
import Data.ByteString.Short (ShortByteString)
import Data.Functor.Identity
+import Data.List
import LLVM.AST
import LLVM.IRBuilder.Module
import LLVM.IRBuilder.Internal.SnocList
let ds = getSnocList (builderDefs s)
return $ defaultModule { moduleName = nm, moduleDefinitions = ds }
+removeDef :: MonadModuleBuilder m => Definition -> m ()
+removeDef def = liftModuleState (modify update)
+ where
+ update (ModuleBuilderState defs typeDefs) =
+ let newDefs = SnocList (delete def (getSnocList defs))
+ in ModuleBuilderState newDefs typeDefs
+
mostRecentDef :: Monad m => ModuleBuilderT m Definition
mostRecentDef = last . getSnocList . builderDefs <$> liftModuleState get