Commits on Source (14)
-
f7744e8e
-
Matthew Pickering authored
The overall goal of this refactoring is to reduce the dependency footprint of the parser and syntax tree. Good reasons include: - Better module graph parallelisability - Make it easier to migrate error messages without introducing module loops - Philosophically, there's not reason for the AST to depend on half the compiler. One of the key edges which added this dependency was > GHC.Hs.Expr -> GHC.Tc.Types (TcLclEnv) As this in turn depending on TcM which depends on HscEnv and so on. Therefore the goal of this patch is to move `TcLclEnv` out of `GHC.Tc.Types` so that `GHC.Hs.Expr` can import TcLclEnv without incurring a huge dependency chain. The changes in this patch are: * Move TcLclEnv from GHC.Tc.Types to GHC.Tc.Types.LclEnv * Create new smaller modules for the types used in TcLclEnv New Modules: - GHC.Tc.Types.ErrCtxt - GHC.Tc.Types.BasicTypes - GHC.Tc.Types.TH - GHC.Tc.Types.LclEnv - GHC.Tc.Types.CtLocEnv - GHC.Tc.Errors.Types.PromotionErr Removed Boot File: - {-# SOURCE #-} GHC.Tc.Types * Introduce TcLclCtxt, the part of the TcLclEnv which doesn't participate in restoreLclEnv. * Replace TcLclEnv in CtLoc with specific CtLocEnv which is defined in GHC.Tc.Types.CtLocEnv. Use CtLocEnv in Implic and CtLoc to record the location of the implication and constraint. By splitting up TcLclEnv from GHC.Tc.Types we allow GHC.Hs.Expr to no longer depend on the TcM monad and all that entails. Fixes #23389 #23409
7cd8a61e -
Matthew Pickering authored
This removes the usage of DynFlags from Tc.Utils.TcType so that it no longer depends on GHC.Driver.Session. In general we don't want anything which is a dependency of Language.Haskell.Syntax to depend on GHC.Driver.Session and removing this edge gets us closer to that goal.
3d8d39d1 -
Matthew Pickering authored
This removes edge from GHC.Hs.Pat to GHC.Driver.Session, which makes Language.Haskell.Syntax end up depending on GHC.Driver.Session.
18db5ada -
Matthew Pickering authored12919dd5
-
Matthew Pickering authored
The hole fit plugins are defined in terms of TcM, a type we want to avoid depending on from `GHC.Tc.Errors.Types`. By moving it into its own module we can remove this dependency. It also simplifies the necessary boot file.
eb852371 -
Matthew Pickering authored
This allows `GHC.Driver.DynFlags` to depend on these types without depending on CoreM and hence the entire simplifier pipeline. We can also remove a hs-boot file with this change.
9e5246d7 -
Matthew Pickering authored52d6a7d7
-
Matthew Pickering authored
These are in a separate commit as the improvement to these tests is the cumulative effect of the previous set of patches rather than just the responsibility of the last one in the patchset.
698d160c -
The VarBind constructor of HsBind is only used at the GhcTc stage. This commit makes that explicit by setting the extension field of VarBind to be DataConCantHappen at all other stages. This allows us to delete a dead code path in GHC.HsToCore.Quote.rep_bind, and remove some panics.
58ccf02e -
The existing utils/genprimopcode/gen_bytearray_ops.py was relocated and extended for this purpose. Additionally, hadrian now knows about this script and uses it when generating primops.txt
54b83253 -
Previously we were always adding the Nightly tag, but this led to all the previous builds getting an increasing number of nightly tags over time. Now we just add it once, when we remove the LatestNightly tag.
ecadbc7e -
Vladislav Zavialov authored
This patch implements @k-binders introduced in GHC Proposal #425 and guarded behind the TypeAbstractions extension: type D :: forall k j. k -> j -> Type data D @k @j a b = ... ^^ ^^ To represent the new syntax, we modify LHsQTyVars as follows: - hsq_explicit :: [LHsTyVarBndr () pass] + hsq_explicit :: [LHsTyVarBndr (HsBndrVis pass) pass] HsBndrVis is a new data type that records the distinction between type variable binders written with and without the @ sign: data HsBndrVis pass = HsBndrRequired | HsBndrInvisible (LHsToken "@" pass) The rest of the patch updates GHC, template-haskell, and haddock to handle the new syntax. Parser: The PsErrUnexpectedTypeAppInDecl error message is removed. The syntax it used to reject is now permitted. Renamer: The @ sign does not affect the scope of a binder, so the changes to the renamer are minimal. See rnLHsTyVarBndrVisFlag. Type checker: There are three code paths that were updated to deal with the newly introduced invisible type variable binders: 1. checking SAKS: see kcCheckDeclHeader_sig, matchUpSigWithDecl 2. checking CUSK: see kcCheckDeclHeader_cusk 3. inference: see kcInferDeclHeader, rejectInvisibleBinders Helper functions bindExplicitTKBndrs_Q_Skol and bindExplicitTKBndrs_Q_Tv are generalized to work with HsBndrVis. Updates the haddock submodule. Metric Increase: MultiLayerModulesTH_OneShot Co-authored-by:
Simon Peyton Jones <simon.peytonjones@gmail.com>
4aea0a72
Showing
- .gitlab/rel_eng/mk-ghcup-metadata/mk_ghcup_metadata.py 1 addition, 1 deletion.gitlab/rel_eng/mk-ghcup-metadata/mk_ghcup_metadata.py
- compiler/GHC/Builtin/Names/TH.hs 28 additions, 3 deletionscompiler/GHC/Builtin/Names/TH.hs
- compiler/GHC/Builtin/bytearray-ops.txt.pp 0 additions, 551 deletionscompiler/GHC/Builtin/bytearray-ops.txt.pp
- compiler/GHC/Builtin/gen_bytearray_addr_access_ops.py 201 additions, 0 deletionscompiler/GHC/Builtin/gen_bytearray_addr_access_ops.py
- compiler/GHC/Builtin/primops.txt.pp 2 additions, 228 deletionscompiler/GHC/Builtin/primops.txt.pp
- compiler/GHC/Core/Opt/CallerCC.hs 1 addition, 94 deletionscompiler/GHC/Core/Opt/CallerCC.hs
- compiler/GHC/Core/Opt/CallerCC.hs-boot 0 additions, 8 deletionscompiler/GHC/Core/Opt/CallerCC.hs-boot
- compiler/GHC/Core/Opt/CallerCC/Types.hs 113 additions, 0 deletionscompiler/GHC/Core/Opt/CallerCC/Types.hs
- compiler/GHC/Core/TyCon.hs 11 additions, 8 deletionscompiler/GHC/Core/TyCon.hs
- compiler/GHC/Driver/DynFlags.hs 1 addition, 1 deletioncompiler/GHC/Driver/DynFlags.hs
- compiler/GHC/Driver/Plugins.hs 1 addition, 1 deletioncompiler/GHC/Driver/Plugins.hs
- compiler/GHC/Hs/Binds.hs 6 additions, 1 deletioncompiler/GHC/Hs/Binds.hs
- compiler/GHC/Hs/Expr.hs 1 addition, 1 deletioncompiler/GHC/Hs/Expr.hs
- compiler/GHC/Hs/Instances.hs 5 additions, 0 deletionscompiler/GHC/Hs/Instances.hs
- compiler/GHC/Hs/Pat.hs 15 additions, 22 deletionscompiler/GHC/Hs/Pat.hs
- compiler/GHC/Hs/Type.hs 22 additions, 2 deletionscompiler/GHC/Hs/Type.hs
- compiler/GHC/Hs/Utils.hs 1 addition, 1 deletioncompiler/GHC/Hs/Utils.hs
- compiler/GHC/HsToCore/Quote.hs 24 additions, 19 deletionscompiler/GHC/HsToCore/Quote.hs
- compiler/GHC/Iface/Errors/Types.hs 2 additions, 1 deletioncompiler/GHC/Iface/Errors/Types.hs
- compiler/GHC/Parser/Errors/Ppr.hs 0 additions, 10 deletionscompiler/GHC/Parser/Errors/Ppr.hs
compiler/GHC/Core/Opt/CallerCC/Types.hs
0 → 100644