-- | Subsystem configuration module GHC.Driver.Config ( initOptCoercionOpts , initSimpleOpts , initEvalOpts , EvalStep(..) ) where import GHC.Prelude import GHC.Driver.DynFlags import GHC.Core.SimpleOpt import GHC.Core.Coercion.Opt import GHCi.Message (EvalOpts(..)) -- | Initialise coercion optimiser configuration from DynFlags initOptCoercionOpts :: DynFlags -> OptCoercionOpts initOptCoercionOpts dflags = OptCoercionOpts { optCoercionEnabled = not (hasNoOptCoercion dflags) } -- | Initialise Simple optimiser configuration from DynFlags initSimpleOpts :: DynFlags -> SimpleOpts initSimpleOpts dflags = SimpleOpts { so_uf_opts = unfoldingOpts dflags , so_co_opts = initOptCoercionOpts dflags , so_eta_red = gopt Opt_DoEtaReduction dflags , so_inline = True } -- | Instruct the interpreter evaluation to break... data EvalStep -- | ... at every breakpoint tick = EvalStepSingle -- | ... after any evaluation to WHNF -- (See Note [Debugger: Step-out]) | EvalStepOut -- | ... only on explicit breakpoints | EvalStepNone -- | Extract GHCi options from DynFlags and step initEvalOpts :: DynFlags -> EvalStep -> EvalOpts initEvalOpts dflags step = EvalOpts { useSandboxThread = gopt Opt_GhciSandbox dflags , singleStep = singleStep , stepOut = stepOut , breakOnException = gopt Opt_BreakOnException dflags , breakOnError = gopt Opt_BreakOnError dflags } where (singleStep, stepOut) = case step of EvalStepSingle -> (True, False) EvalStepOut -> (False, True) EvalStepNone -> (False, False)