From 9e870c79c014db66f8d5c8400d03bc5e1d98c4b7 Mon Sep 17 00:00:00 2001 From: Joachim Breitner Date: Wed, 13 Oct 2021 19:43:42 +0200 Subject: Move BreakInfo into own module MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit while working on GHCi stuff, e.g. `GHC.Runtime.Eval.Types`, I observed a fair amount of modules being recompiled that I didn’t expect to depend on this, from byte code interpreters to linkers. Turns out that the rather simple `BreakInfo` type is all these modules need from the `GHC.Runtime.Eval.*` hierarchy, so by moving that into its own file we make the dependency tree wider and shallower, which is probably worth it. --- compiler/GHC.hs | 2 +- compiler/GHC/Runtime/Eval.hs | 1 + compiler/GHC/Runtime/Eval/Types.hs | 10 ++-------- compiler/GHC/Runtime/Interpreter.hs | 2 +- compiler/GHC/Types/BreakInfo.hs | 12 ++++++++++++ compiler/ghc.cabal.in | 1 + testsuite/tests/count-deps/CountDepsAst.stdout | 3 ++- testsuite/tests/count-deps/CountDepsParser.stdout | 3 ++- 8 files changed, 22 insertions(+), 12 deletions(-) create mode 100644 compiler/GHC/Types/BreakInfo.hs diff --git a/compiler/GHC.hs b/compiler/GHC.hs index 0e4f781a29..0488ccad11 100644 --- a/compiler/GHC.hs +++ b/compiler/GHC.hs @@ -321,7 +321,6 @@ import GHC.ByteCode.Types import qualified GHC.Linker.Loader as Loader import GHC.Runtime.Loader import GHC.Runtime.Eval -import GHC.Runtime.Eval.Types import GHC.Runtime.Interpreter import GHC.Runtime.Context import GHCi.RemoteTypes @@ -387,6 +386,7 @@ import GHC.Types.TyThing import GHC.Types.Name.Env import GHC.Types.Name.Ppr import GHC.Types.TypeEnv +import GHC.Types.BreakInfo import GHC.Unit import GHC.Unit.Env diff --git a/compiler/GHC/Runtime/Eval.hs b/compiler/GHC/Runtime/Eval.hs index bceb9a4159..a4ddbbfd4a 100644 --- a/compiler/GHC/Runtime/Eval.hs +++ b/compiler/GHC/Runtime/Eval.hs @@ -106,6 +106,7 @@ import GHC.Types.SrcLoc import GHC.Types.Unique import GHC.Types.Unique.Supply import GHC.Types.TyThing +import GHC.Types.BreakInfo import GHC.Unit import GHC.Unit.Module.Graph diff --git a/compiler/GHC/Runtime/Eval/Types.hs b/compiler/GHC/Runtime/Eval/Types.hs index c72c5c89ff..5706c037de 100644 --- a/compiler/GHC/Runtime/Eval/Types.hs +++ b/compiler/GHC/Runtime/Eval/Types.hs @@ -8,8 +8,7 @@ module GHC.Runtime.Eval.Types ( Resume(..), History(..), ExecResult(..), - SingleStep(..), isStep, ExecOptions(..), - BreakInfo(..) + SingleStep(..), isStep, ExecOptions(..) ) where import GHC.Prelude @@ -19,7 +18,7 @@ import GHCi.Message (EvalExpr, ResumeContext) import GHC.Types.Id import GHC.Types.Name import GHC.Types.TyThing -import GHC.Unit.Module +import GHC.Types.BreakInfo import GHC.Types.Name.Reader import GHC.Types.SrcLoc import GHC.Utils.Exception @@ -54,11 +53,6 @@ data ExecResult , breakInfo :: Maybe BreakInfo } -data BreakInfo = BreakInfo - { breakInfo_module :: Module - , breakInfo_number :: Int - } - data Resume = Resume { resumeStmt :: String -- the original statement , resumeContext :: ForeignRef (ResumeContext [HValueRef]) diff --git a/compiler/GHC/Runtime/Interpreter.hs b/compiler/GHC/Runtime/Interpreter.hs index 7dcc5fcd82..29c5592299 100644 --- a/compiler/GHC/Runtime/Interpreter.hs +++ b/compiler/GHC/Runtime/Interpreter.hs @@ -66,7 +66,7 @@ import GHCi.Message import GHCi.RemoteTypes import GHCi.ResolvedBCO import GHCi.BreakArray (BreakArray) -import GHC.Runtime.Eval.Types(BreakInfo(..)) +import GHC.Types.BreakInfo (BreakInfo(..)) import GHC.ByteCode.Types import GHC.Linker.Types diff --git a/compiler/GHC/Types/BreakInfo.hs b/compiler/GHC/Types/BreakInfo.hs new file mode 100644 index 0000000000..d08ccda0bf --- /dev/null +++ b/compiler/GHC/Types/BreakInfo.hs @@ -0,0 +1,12 @@ +-- | A module for the BreakInfo type. Used by both the GHC.Runtime.Eval and +-- GHC.Runtime.Interpreter hierarchy, so put here to have a less deep module +-- dependency tree +module GHC.Types.BreakInfo (BreakInfo(..)) where + +import GHC.Prelude +import GHC.Unit.Module + +data BreakInfo = BreakInfo + { breakInfo_module :: Module + , breakInfo_number :: Int + } diff --git a/compiler/ghc.cabal.in b/compiler/ghc.cabal.in index 25833017d1..668642af80 100644 --- a/compiler/ghc.cabal.in +++ b/compiler/ghc.cabal.in @@ -679,6 +679,7 @@ Library GHC.Types.Annotations GHC.Types.Avail GHC.Types.Basic + GHC.Types.BreakInfo GHC.Types.CompleteMatch GHC.Types.CostCentre GHC.Types.CostCentre.State diff --git a/testsuite/tests/count-deps/CountDepsAst.stdout b/testsuite/tests/count-deps/CountDepsAst.stdout index a73ba61a0f..da2b5b3e5c 100644 --- a/testsuite/tests/count-deps/CountDepsAst.stdout +++ b/testsuite/tests/count-deps/CountDepsAst.stdout @@ -1,4 +1,4 @@ -Found 277 Language.Haskell.Syntax module dependencies +Found 278 Language.Haskell.Syntax module dependencies GHC.Builtin.Names GHC.Builtin.PrimOps GHC.Builtin.Types @@ -171,6 +171,7 @@ GHC.Tc.Utils.TcType GHC.Types.Annotations GHC.Types.Avail GHC.Types.Basic +GHC.Types.BreakInfo GHC.Types.CompleteMatch GHC.Types.CostCentre GHC.Types.CostCentre.State diff --git a/testsuite/tests/count-deps/CountDepsParser.stdout b/testsuite/tests/count-deps/CountDepsParser.stdout index 617f2c503c..f67d2eb223 100644 --- a/testsuite/tests/count-deps/CountDepsParser.stdout +++ b/testsuite/tests/count-deps/CountDepsParser.stdout @@ -1,4 +1,4 @@ -Found 283 GHC.Parser module dependencies +Found 284 GHC.Parser module dependencies GHC.Builtin.Names GHC.Builtin.PrimOps GHC.Builtin.Types @@ -177,6 +177,7 @@ GHC.Tc.Utils.TcType GHC.Types.Annotations GHC.Types.Avail GHC.Types.Basic +GHC.Types.BreakInfo GHC.Types.CompleteMatch GHC.Types.CostCentre GHC.Types.CostCentre.State -- cgit v1.2.1