import qualified "transformers" Control.Monad.Trans as Trans
import qualified Control.Monad as Monad
import qualified Control.Monad.Trans.Writer as Writer
+import qualified Data.Accessor.Monad.Trans.State as MonadState
import qualified Data.Monoid as Monoid
+import qualified Data.Map as Map
-- GHC API
import CoreSyn
let newbody = MkCore.mkCoreLams newparams (MkCore.mkCoreApps body oldargs)
-- Create a new function with the same name but a new body
newf <- Trans.lift $ mkFunction f newbody
+
+ Trans.lift $ MonadState.modify tsInitStates (\ismap ->
+ let init_state_maybe = Map.lookup f ismap in
+ case init_state_maybe of
+ Nothing -> ismap
+ Just init_state -> Map.insert newf init_state ismap)
-- Replace the original application with one of the new function to the
-- new arguments.
change $ MkCore.mkCoreApps (Var newf) newargs
-- a different error if this happens down in the recursion.
error $ "\nNormalize.normalizeBind: Function " ++ show bndr ++ " is polymorphic, can't normalize"
else do
- expr <- getBinding bndr
+ Just expr <- getGlobalBind bndr
normalizeExpr (show bndr) expr
-- | Normalize an expression
trace ("\n" ++ what ++ " after normalization:\n\n" ++ showSDoc ( ppr expr')) $ return ()
return expr'
--- | Get the value that is bound to the given binder at top level. Fails when
--- there is no such binding.
-getBinding ::
- CoreBndr -- ^ The binder to get the expression for
- -> TranslatorSession CoreExpr -- ^ The value bound to the binder
-
-getBinding bndr = Utils.makeCached bndr tsBindings $
- -- If the binding isn't in the "cache" (bindings map), then we can't create
- -- it out of thin air, so return an error.
- error $ "Normalize.getBinding: Unknown function requested: " ++ show bndr
-
-- | Split a normalized expression into the argument binders, top level
-- bindings and the result binder.
splitNormalized ::