diff options
Diffstat (limited to 'compiler/GHC/IfaceToCore.hs')
-rw-r--r-- | compiler/GHC/IfaceToCore.hs | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/compiler/GHC/IfaceToCore.hs b/compiler/GHC/IfaceToCore.hs index a69cc34a73..fa714448ac 100644 --- a/compiler/GHC/IfaceToCore.hs +++ b/compiler/GHC/IfaceToCore.hs @@ -12,6 +12,7 @@ Type checking of type signatures in interface files {-# OPTIONS_GHC -Wno-incomplete-record-updates #-} {-# LANGUAGE TupleSections #-} +{-# LANGUAGE RecordWildCards #-} module GHC.IfaceToCore ( tcLookupImported_maybe, @@ -25,10 +26,15 @@ module GHC.IfaceToCore ( tcIfaceExpr, -- Desired by HERMIT (#7683) tcIfaceGlobal, tcIfaceOneShot, tcTopIfaceBindings, + hydrateCgBreakInfo ) where import GHC.Prelude +import GHC.ByteCode.Types + +import Data.Word + import GHC.Driver.Env import GHC.Driver.Session import GHC.Driver.Config.Core.Lint ( initLintConfig ) @@ -2166,3 +2172,12 @@ bindIfaceTyConBinderX :: (IfaceBndr -> (TyCoVar -> IfL a) -> IfL a) bindIfaceTyConBinderX bind_tv (Bndr tv vis) thing_inside = bind_tv tv $ \tv' -> thing_inside (Bndr tv' vis) + +-- CgBreakInfo + +hydrateCgBreakInfo :: CgBreakInfo -> IfL ([Maybe (Id, Word16)], Type) +hydrateCgBreakInfo CgBreakInfo{..} = do + bindIfaceTyVars cgb_tyvars $ \_ -> do + result_ty <- tcIfaceType cgb_resty + mbVars <- mapM (traverse (\(if_gbl, offset) -> (,offset) <$> bindIfaceId if_gbl return)) cgb_vars + return (mbVars, result_ty) |