diff options
author | Sylvain Henry <sylvain@haskus.fr> | 2020-02-11 09:41:44 +0100 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2020-06-17 16:22:03 -0400 |
commit | 96aa57878fd6e6a7b92e841a0df8b5255a559c97 (patch) | |
tree | da1dabadf29c6b681682a4577b4ca08e29bc44a5 /compiler/GHC/Iface | |
parent | 9f96bc127d6231b5e76bbab442244eb303b08867 (diff) | |
download | haskell-96aa57878fd6e6a7b92e841a0df8b5255a559c97.tar.gz |
Update compiler
Thanks to ghc-bignum, the compiler can be simplified:
* Types and constructors of Integer and Natural can be wired-in. It
means that we don't have to query them from interfaces. It also means
that numeric literals don't have to carry their type with them.
* The same code is used whatever ghc-bignum backend is enabled. In
particular, conversion of bignum literals into final Core expressions
is now much more straightforward. Bignum closure inspection too.
* GHC itself doesn't depend on any integer-* package anymore
* The `integerLibrary` setting is gone.
Diffstat (limited to 'compiler/GHC/Iface')
-rw-r--r-- | compiler/GHC/Iface/Load.hs | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/compiler/GHC/Iface/Load.hs b/compiler/GHC/Iface/Load.hs index 53560ca732..4ba0e1966a 100644 --- a/compiler/GHC/Iface/Load.hs +++ b/compiler/GHC/Iface/Load.hs @@ -53,7 +53,7 @@ import GHC.Settings.Constants import GHC.Builtin.Names import GHC.Builtin.Utils import GHC.Builtin.PrimOps ( allThePrimOps, primOpFixity, primOpOcc ) -import GHC.Types.Id.Make ( seqId ) +import GHC.Types.Id.Make ( seqId, EnableBignumRules(..) ) import GHC.Core.Rules import GHC.Core.TyCon import GHC.Types.Annotations @@ -1016,8 +1016,8 @@ readIface wanted_mod file_path ********************************************************* -} -initExternalPackageState :: ExternalPackageState -initExternalPackageState +initExternalPackageState :: DynFlags -> ExternalPackageState +initExternalPackageState dflags = EPS { eps_is_boot = emptyUFM, eps_PIT = emptyPackageIfaceTable, @@ -1025,7 +1025,7 @@ initExternalPackageState eps_PTE = emptyTypeEnv, eps_inst_env = emptyInstEnv, eps_fam_inst_env = emptyFamInstEnv, - eps_rule_base = mkRuleBase builtinRules, + eps_rule_base = mkRuleBase builtinRules', -- Initialise the EPS rule pool with the built-in rules eps_mod_fam_inst_env = emptyModuleEnv, @@ -1033,8 +1033,14 @@ initExternalPackageState eps_ann_env = emptyAnnEnv, eps_stats = EpsStats { n_ifaces_in = 0, n_decls_in = 0, n_decls_out = 0 , n_insts_in = 0, n_insts_out = 0 - , n_rules_in = length builtinRules, n_rules_out = 0 } + , n_rules_in = length builtinRules', n_rules_out = 0 } } + where + enableBignumRules + | homeUnitId dflags == primUnitId = EnableBignumRules False + | homeUnitId dflags == bignumUnitId = EnableBignumRules False + | otherwise = EnableBignumRules True + builtinRules' = builtinRules enableBignumRules {- ********************************************************* |