    module GHC.Driver.Config.HsToCore.Ticks
      ( initTicksConfig
      , breakpointsAllowed
      )
    where

    import GHC.Prelude

    import Data.Maybe (catMaybes)

    import GHC.Driver.Backend
    import GHC.Driver.Session
    import GHC.HsToCore.Ticks

    initTicksConfig :: DynFlags -> TicksConfig
    initTicksConfig :: DynFlags -> TicksConfig
    initTicksConfig DynFlags
    dflags = TicksConfig
      { ticks_passes :: [TickishType]
    ticks_passes       = DynFlags -> [TickishType]
    coveragePasses DynFlags
    dflags
      , ticks_profAuto :: ProfAuto
    ticks_profAuto     = DynFlags -> ProfAuto
    profAuto DynFlags
    dflags
      , ticks_countEntries :: Bool
    ticks_countEntries = GeneralFlag -> DynFlags -> Bool
    gopt GeneralFlag
    Opt_ProfCountEntries DynFlags
    dflags
      }

    breakpointsAllowed :: DynFlags -> Bool
    breakpointsAllowed :: DynFlags -> Bool
    breakpointsAllowed DynFlags
    dflags =
      GeneralFlag -> DynFlags -> Bool
    gopt GeneralFlag
    Opt_InsertBreakpoints DynFlags
    dflags Bool -> Bool -> Bool
    &&
      Backend -> Bool
    backendSupportsBreakpoints (DynFlags -> Backend
    backend DynFlags
    dflags)

    coveragePasses :: DynFlags -> [TickishType]
    coveragePasses :: DynFlags -> [TickishType]
    coveragePasses DynFlags
    dflags = [Maybe TickishType] -> [TickishType]
    forall a. [Maybe a] -> [a]
    catMaybes
      [ TickishType -> Bool -> Maybe TickishType
    forall {a}. a -> Bool -> Maybe a
    ifA TickishType
    Breakpoints (Bool -> Maybe TickishType) -> Bool -> Maybe TickishType
    forall a b. (a -> b) -> a -> b
    $ DynFlags -> Bool
    breakpointsAllowed DynFlags
    dflags
      , TickishType -> Bool -> Maybe TickishType
    forall {a}. a -> Bool -> Maybe a
    ifA TickishType
    HpcTicks (Bool -> Maybe TickishType) -> Bool -> Maybe TickishType
    forall a b. (a -> b) -> a -> b
    $ GeneralFlag -> DynFlags -> Bool
    gopt GeneralFlag
    Opt_Hpc DynFlags
    dflags
      , TickishType -> Bool -> Maybe TickishType
    forall {a}. a -> Bool -> Maybe a
    ifA TickishType
    ProfNotes (Bool -> Maybe TickishType) -> Bool -> Maybe TickishType
    forall a b. (a -> b) -> a -> b
    $ DynFlags -> Bool
    sccProfilingEnabled DynFlags
    dflags Bool -> Bool -> Bool
    && DynFlags -> ProfAuto
    profAuto DynFlags
    dflags ProfAuto -> ProfAuto -> Bool
    forall a. Eq a => a -> a -> Bool
    /= ProfAuto
    NoProfAuto
      , TickishType -> Bool -> Maybe TickishType
    forall {a}. a -> Bool -> Maybe a
    ifA TickishType
    SourceNotes (Bool -> Maybe TickishType) -> Bool -> Maybe TickishType
    forall a b. (a -> b) -> a -> b
    $ DynFlags -> Bool
    needSourceNotes DynFlags
    dflags
      ]
      where ifA :: a -> Bool -> Maybe a
    ifA a
    x Bool
    cond = if Bool
    cond then a -> Maybe a
    forall a. a -> Maybe a
    Just a
    x else Maybe a
    forall a. Maybe a
    Nothing