content: module GHC.Driver.Config.CoreToStg.Prep
    ( initCorePrepConfig
    , initCorePrepPgmConfig
    ) where
  
  import GHC.Prelude
  
  import GHC.Core.Opt.Pipeline.Types ( CoreToDo(..) )
  import GHC.Driver.Env
  import GHC.Driver.Session
  import GHC.Driver.Config.Core.Lint
  import GHC.Driver.Config.Core.Opt.Arity
  import GHC.Types.Var
  import GHC.Utils.Outputable ( alwaysQualify )
  
  import GHC.CoreToStg.Prep
  
  initCorePrepConfig :: HscEnv -> IO CorePrepConfig
  initCorePrepConfig hsc_env = do
     let dflags = hsc_dflags hsc_env
     return $ CorePrepConfig
        { cp_catchNonexhaustiveCases = gopt Opt_CatchNonexhaustiveCases dflags
        , cp_platform  = targetPlatform dflags
        , cp_arityOpts = if gopt Opt_DoCleverArgEtaExpansion dflags
                         then Just (initArityOpts dflags)
                         else Nothing
        , cp_specEval  = gopt Opt_SpecEval dflags
        , cp_specEvalDFun = gopt Opt_SpecEvalDictFun dflags
        }
  
  initCorePrepPgmConfig :: DynFlags -> [Var] -> CorePrepPgmConfig
  initCorePrepPgmConfig dflags extra_vars = CorePrepPgmConfig
    { cpPgm_endPassConfig     = initEndPassConfig dflags extra_vars alwaysQualify CorePrep
    , cpPgm_generateDebugInfo = needSourceNotes dflags
    }
  