module GHC.Unit.Home.ModInfo
(
HomeModInfo (..)
, homeModInfoObject
, homeModInfoByteCode
, HomeModLinkable (..)
, homeModLinkableByteCode
, homeModLinkableObject
, emptyHomeModInfoLinkable
)
where
import GHC.Prelude
import GHC.Unit.Module.ModIface
import GHC.Unit.Module.ModDetails
import GHC.Linker.Types ( Linkable, LinkableWith, ModuleByteCode, LinkablePart (..) )
import GHC.Utils.Outputable
import qualified Data.List.NonEmpty as NE
data HomeModInfo = HomeModInfo
{ HomeModInfo -> ModIface
hm_iface :: !ModIface
, HomeModInfo -> ModDetails
hm_details :: ModDetails
, HomeModInfo -> HomeModLinkable
hm_linkable :: !HomeModLinkable
}
homeModInfoByteCode :: HomeModInfo -> Maybe Linkable
homeModInfoByteCode :: HomeModInfo -> Maybe Linkable
homeModInfoByteCode = HomeModLinkable -> Maybe Linkable
homeModLinkableByteCode (HomeModLinkable -> Maybe Linkable)
-> (HomeModInfo -> HomeModLinkable)
-> HomeModInfo
-> Maybe Linkable
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HomeModInfo -> HomeModLinkable
hm_linkable
homeModInfoObject :: HomeModInfo -> Maybe Linkable
homeModInfoObject :: HomeModInfo -> Maybe Linkable
homeModInfoObject = HomeModLinkable -> Maybe Linkable
homeModLinkableObject (HomeModLinkable -> Maybe Linkable)
-> (HomeModInfo -> HomeModLinkable)
-> HomeModInfo
-> Maybe Linkable
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HomeModInfo -> HomeModLinkable
hm_linkable
emptyHomeModInfoLinkable :: HomeModLinkable
emptyHomeModInfoLinkable :: HomeModLinkable
emptyHomeModInfoLinkable = Maybe (LinkableWith ModuleByteCode)
-> Maybe Linkable -> HomeModLinkable
HomeModLinkable Maybe (LinkableWith ModuleByteCode)
forall a. Maybe a
Nothing Maybe Linkable
forall a. Maybe a
Nothing
data HomeModLinkable = HomeModLinkable { HomeModLinkable -> Maybe (LinkableWith ModuleByteCode)
homeMod_bytecode :: !(Maybe (LinkableWith ModuleByteCode))
, HomeModLinkable -> Maybe Linkable
homeMod_object :: !(Maybe Linkable) }
homeModLinkableByteCode :: HomeModLinkable -> Maybe Linkable
homeModLinkableByteCode :: HomeModLinkable -> Maybe Linkable
homeModLinkableByteCode = (LinkableWith ModuleByteCode -> Linkable)
-> Maybe (LinkableWith ModuleByteCode) -> Maybe Linkable
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((ModuleByteCode -> NonEmpty LinkablePart)
-> LinkableWith ModuleByteCode -> Linkable
forall a b. (a -> b) -> LinkableWith a -> LinkableWith b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (LinkablePart -> NonEmpty LinkablePart
forall a. a -> NonEmpty a
NE.singleton (LinkablePart -> NonEmpty LinkablePart)
-> (ModuleByteCode -> LinkablePart)
-> ModuleByteCode
-> NonEmpty LinkablePart
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ModuleByteCode -> LinkablePart
ModuleByteCode -> LinkablePart
DotGBC)) (Maybe (LinkableWith ModuleByteCode) -> Maybe Linkable)
-> (HomeModLinkable -> Maybe (LinkableWith ModuleByteCode))
-> HomeModLinkable
-> Maybe Linkable
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HomeModLinkable -> Maybe (LinkableWith ModuleByteCode)
homeMod_bytecode
homeModLinkableObject :: HomeModLinkable -> Maybe Linkable
homeModLinkableObject :: HomeModLinkable -> Maybe Linkable
homeModLinkableObject = HomeModLinkable -> Maybe Linkable
homeMod_object
instance Outputable HomeModLinkable where
ppr :: HomeModLinkable -> SDoc
ppr (HomeModLinkable Maybe (LinkableWith ModuleByteCode)
l1 Maybe Linkable
l2) = Maybe (LinkableWith ModuleByteCode) -> SDoc
forall a. Outputable a => a -> SDoc
ppr Maybe (LinkableWith ModuleByteCode)
l1 SDoc -> SDoc -> SDoc
forall doc. IsDoc doc => doc -> doc -> doc
$$ Maybe Linkable -> SDoc
forall a. Outputable a => a -> SDoc
ppr Maybe Linkable
l2