[Git][ghc/ghc][wip/spj-reinstallable-base2] 11 commits: fixup krep fixes
Rodrigo Mesquita pushed to branch wip/spj-reinstallable-base2 at Glasgow Haskell Compiler / GHC
Commits:
9c334c51 by Rodrigo Mesquita at 2026-05-05T16:09:19+01:00
fixup krep fixes
TODO GET BACK
- - - - -
5f335b6e by Rodrigo Mesquita at 2026-05-05T16:09:25+01:00
Revert "fixup krep fixes"
This reverts commit 0c3177e9ecfdd9444df3439744996d599cb64c9b.
TODO GET BACK
- - - - -
9462a047 by Rodrigo Mesquita at 2026-05-05T16:09:28+01:00
Revert "krepStar, krepStarArrStar, etc..."
This reverts commit a47d441c70e2650cd7c6a4d466ec57c311ebe329.
TODO TODO TODO.
Thinking a bit more about this. get back later.
- - - - -
bf30dcb3 by Rodrigo Mesquita at 2026-05-05T16:27:07+01:00
emptyCallStack
- - - - -
f6e3662f by Rodrigo Mesquita at 2026-05-05T16:31:30+01:00
misc fixes to build
- - - - -
7f109c42 by Rodrigo Mesquita at 2026-05-05T16:55:20+01:00
callStackTyConKey, exceptionContextTyConKey, emptyExceptionContextName
- - - - -
d26b5b42 by Rodrigo Mesquita at 2026-05-05T17:10:49+01:00
errorMessageTypeErrorFamName, typeErrorTextDataConName, typeErrorAppendDataConName, typeErrorVAppendDataConName, typeErrorShowTypeDataConName
- - - - -
b7ce4338 by Rodrigo Mesquita at 2026-05-05T17:31:44+01:00
staticPtrTyConName, staticPtrDataConName, staticPtrInfoDataConName
- - - - -
7adf8b47 by Rodrigo Mesquita at 2026-05-05T17:31:44+01:00
-jsvalTyConName
- - - - -
e354bdae by Rodrigo Mesquita at 2026-05-05T17:31:44+01:00
knownNatClassName, knownSymbolClassName, knownCharClassName
- - - - -
a207cbcf by Rodrigo Mesquita at 2026-05-05T17:33:22+01:00
unsafeUnpackJSStringUtf8##
- - - - -
20 changed files:
- compiler/GHC/Builtin/KnownKeys.hs
- compiler/GHC/Builtin/KnownOccs.hs
- compiler/GHC/Core/Type.hs
- compiler/GHC/Driver/Config/Tidy.hs
- compiler/GHC/Stg/BcPrep.hs
- compiler/GHC/StgToJS/Apply.hs
- compiler/GHC/Tc/Gen/Expr.hs
- compiler/GHC/Tc/Instance/Class.hs
- compiler/GHC/Tc/Instance/Typeable.hs
- compiler/GHC/Tc/Solver/Default.hs
- compiler/GHC/Tc/Solver/Dict.hs
- compiler/GHC/Tc/Solver/Monad.hs
- compiler/GHC/Tc/Types/Constraint.hs
- ghc/GHCi/UI.hs
- libraries/base/src/GHC/Essentials.hs
- libraries/ghc-internal/src/GHC/Internal/Exception/Context.hs
- libraries/ghc-internal/src/GHC/Internal/Exception/Context.hs-boot
- libraries/ghc-internal/src/GHC/Internal/JS/Prim.hs
- libraries/ghc-internal/src/GHC/Internal/Stack/Types.hs
- libraries/ghc-internal/src/GHC/Internal/Types.hs
Changes:
=====================================
compiler/GHC/Builtin/KnownKeys.hs
=====================================
@@ -253,10 +253,26 @@ knownKeyTable
-- Implicit Params
, (mkTcOcc "IP", ipClassKey)
+ -- Callstacks
+ , (mkVarOcc "CallStack", callStackTyConKey)
+
+ -- Exception context
+ , (mkVarOcc "ExceptionContext", exceptionContextTyConKey)
+
+ -- Custom type errors
+ , (mkTcOcc "TypeError", errorMessageTypeErrorFamKey)
+ , (mkDataOcc "Text", typeErrorTextDataConKey)
+ , (mkDataOcc ":<>:", typeErrorAppendDataConKey)
+ , (mkDataOcc ":$$:", typeErrorVAppendDataConKey)
+ , (mkDataOcc "ShowType", typeErrorShowTypeDataConKey)
+
-- Base strings Strings
, (mkVarOcc "unpackCString#", unpackCStringIdKey)
, (mkVarOcc "unpackCStringUtf8#", unpackCStringUtf8IdKey)
+ -- JS primitives
+ , (mkVarOcc "unsafeUnpackJSStringUtf8##", unsafeUnpackJSStringUtf8ShShKey)
+
-- Known-key names that have BuiltinRules in ConstantFold
, (mkVarOcc "unpackFoldrCString#", unpackCStringFoldrIdKey)
, (mkVarOcc "unpackFoldrCStringUtf8#", unpackCStringFoldrUtf8IdKey)
@@ -343,42 +359,22 @@ knownKeyTable
basicKnownKeyNames :: [Name] -- See Note [Known-key names]
basicKnownKeyNames
= [
+ -- KindReps for common cases
+ starKindRepName,
+ starArrStarKindRepName,
+ starArrStarArrStarKindRepName,
+ constraintKindRepName,
-- FFI primitive types that are not wired-in.
ptrTyConName, funPtrTyConName, constPtrConName,
int8TyConName, int16TyConName, int32TyConName, int64TyConName,
word8TyConName, word16TyConName, word32TyConName, word64TyConName,
- jsvalTyConName,
-
- -- Type-level naturals
- knownNatClassName, knownSymbolClassName, knownCharClassName,
-
- -- ExceptionContext
- exceptionContextTyConName,
- emptyExceptionContextName,
-
- -- Call Stacks
- callStackTyConName,
- emptyCallStackName,
-- Plugins
pluginTyConName
, frontendPluginTyConName
- -- StaticPtr
- , staticPtrTyConName
- , staticPtrDataConName, staticPtrInfoDataConName
-
- -- Custom type errors
- , errorMessageTypeErrorFamName
- , typeErrorTextDataConName
- , typeErrorAppendDataConName
- , typeErrorVAppendDataConName
- , typeErrorShowTypeDataConName
-
-- Unsafe coercion proofs
, unsafeCoercePrimName
-
- , unsafeUnpackJSStringUtf8ShShName
]
@@ -425,33 +421,21 @@ bniVarQual str key = varQual gHC_INTERNAL_NUM_INTEGER (fsLit str) key
-- End of ghc-bignum
---------------------------------
+
+-- Class Typeable, and functions for constructing `Typeable` dictionaries
+starKindRepName, starArrStarKindRepName,
+ starArrStarArrStarKindRepName, constraintKindRepName :: Name
+-- This is the Typeable 'Module' for GHC.Prim (which has no code, so we place in GHC.Types)
+-- See Note [Grand plan for Typeable] in GHC.Tc.Instance.Typeable.
+starKindRepName = varQual gHC_TYPES (fsLit "krep$*") starKindRepKey
+starArrStarKindRepName = varQual gHC_TYPES (fsLit "krep$*Arr*") starArrStarKindRepKey
+starArrStarArrStarKindRepName = varQual gHC_TYPES (fsLit "krep$*->*->*") starArrStarArrStarKindRepKey
+constraintKindRepName = varQual gHC_TYPES (fsLit "krep$Constraint") constraintKindRepKey
+
-- WithDict
withDictClassName :: Name
withDictClassName = clsQual gHC_MAGIC_DICT (fsLit "WithDict") withDictClassKey
--- Custom type errors
-errorMessageTypeErrorFamName
- , typeErrorTextDataConName
- , typeErrorAppendDataConName
- , typeErrorVAppendDataConName
- , typeErrorShowTypeDataConName
- :: Name
-
-errorMessageTypeErrorFamName =
- tcQual gHC_INTERNAL_TYPEERROR (fsLit "TypeError") errorMessageTypeErrorFamKey
-
-typeErrorTextDataConName =
- dcQual gHC_INTERNAL_TYPEERROR (fsLit "Text") typeErrorTextDataConKey
-
-typeErrorAppendDataConName =
- dcQual gHC_INTERNAL_TYPEERROR (fsLit ":<>:") typeErrorAppendDataConKey
-
-typeErrorVAppendDataConName =
- dcQual gHC_INTERNAL_TYPEERROR (fsLit ":$$:") typeErrorVAppendDataConKey
-
-typeErrorShowTypeDataConName =
- dcQual gHC_INTERNAL_TYPEERROR (fsLit "ShowType") typeErrorShowTypeDataConKey
-
-- Unsafe coercion proofs
unsafeCoercePrimName:: Name
unsafeCoercePrimName = varQual gHC_INTERNAL_UNSAFE_COERCE (fsLit "unsafeCoerce#") unsafeCoercePrimIdKey
@@ -478,28 +462,6 @@ ptrTyConName, funPtrTyConName :: Name
ptrTyConName = tcQual gHC_INTERNAL_PTR (fsLit "Ptr") ptrTyConKey
funPtrTyConName = tcQual gHC_INTERNAL_PTR (fsLit "FunPtr") funPtrTyConKey
--- Type-level naturals
-knownNatClassName :: Name
-knownNatClassName = clsQual gHC_INTERNAL_TYPENATS (fsLit "KnownNat") knownNatClassKey
-knownSymbolClassName :: Name
-knownSymbolClassName = clsQual gHC_INTERNAL_TYPELITS (fsLit "KnownSymbol") knownSymbolClassKey
-knownCharClassName :: Name
-knownCharClassName = clsQual gHC_INTERNAL_TYPELITS (fsLit "KnownChar") knownCharClassKey
-
--- ExceptionContext
-exceptionContextTyConName, emptyExceptionContextName :: Name
-exceptionContextTyConName =
- tcQual gHC_INTERNAL_EXCEPTION_CONTEXT (fsLit "ExceptionContext") exceptionContextTyConKey
-emptyExceptionContextName
- = varQual gHC_INTERNAL_EXCEPTION_CONTEXT (fsLit "emptyExceptionContext") emptyExceptionContextKey
-
--- Source Locations
-callStackTyConName, emptyCallStackName :: Name
-callStackTyConName
- = tcQual gHC_INTERNAL_STACK_TYPES (fsLit "CallStack") callStackTyConKey
-emptyCallStackName
- = varQual gHC_INTERNAL_STACK_TYPES (fsLit "emptyCallStack") emptyCallStackKey
-
-- plugins
pLUGINS :: Module
pLUGINS = mkThisGhcModule (fsLit "GHC.Driver.Plugins")
@@ -508,31 +470,10 @@ pluginTyConName = tcQual pLUGINS (fsLit "Plugin") pluginTyConKey
frontendPluginTyConName :: Name
frontendPluginTyConName = tcQual pLUGINS (fsLit "FrontendPlugin") frontendPluginTyConKey
-staticPtrInfoTyConName :: Name
-staticPtrInfoTyConName =
- tcQual gHC_INTERNAL_STATICPTR (fsLit "StaticPtrInfo") staticPtrInfoTyConKey
-
-staticPtrInfoDataConName :: Name
-staticPtrInfoDataConName =
- dcQual gHC_INTERNAL_STATICPTR (fsLit "StaticPtrInfo") staticPtrInfoDataConKey
-
-staticPtrTyConName :: Name
-staticPtrTyConName =
- tcQual gHC_INTERNAL_STATICPTR (fsLit "StaticPtr") staticPtrTyConKey
-
-staticPtrDataConName :: Name
-staticPtrDataConName =
- dcQual gHC_INTERNAL_STATICPTR (fsLit "StaticPtr") staticPtrDataConKey
-
constPtrConName :: Name
constPtrConName =
tcQual gHC_INTERNAL_FOREIGN_C_CONSTPTR (fsLit "ConstPtr") constPtrTyConKey
-jsvalTyConName :: Name
-jsvalTyConName = tcQual gHC_INTERNAL_WASM_PRIM_TYPES (fsLit "JSVal") jsvalTyConKey
-
-unsafeUnpackJSStringUtf8ShShName :: Name
-unsafeUnpackJSStringUtf8ShShName = varQual gHC_INTERNAL_JS_PRIM (fsLit "unsafeUnpackJSStringUtf8##") unsafeUnpackJSStringUtf8ShShKey
{-
************************************************************************
@@ -871,12 +812,6 @@ specTyConKey = mkPreludeTyConUnique 185
smallArrayPrimTyConKey = mkPreludeTyConUnique 187
smallMutableArrayPrimTyConKey = mkPreludeTyConUnique 188
-staticPtrTyConKey :: KnownKey
-staticPtrTyConKey = mkPreludeTyConUnique 189
-
-staticPtrInfoTyConKey :: KnownKey
-staticPtrInfoTyConKey = mkPreludeTyConUnique 190
-
callStackTyConKey :: KnownKey
callStackTyConKey = mkPreludeTyConUnique 191
@@ -1344,6 +1279,13 @@ typeCharTypeRepKey = mkPreludeMiscIdUnique 509
typeRepIdKey = mkPreludeMiscIdUnique 510
mkTrFunKey = mkPreludeMiscIdUnique 511
+-- KindReps for common cases
+starKindRepKey, starArrStarKindRepKey, starArrStarArrStarKindRepKey, constraintKindRepKey :: KnownKey
+starKindRepKey = mkPreludeMiscIdUnique 520
+starArrStarKindRepKey = mkPreludeMiscIdUnique 521
+starArrStarArrStarKindRepKey = mkPreludeMiscIdUnique 522
+constraintKindRepKey = mkPreludeMiscIdUnique 523
+
-- Dynamic
toDynIdKey :: KnownKey
toDynIdKey = mkPreludeMiscIdUnique 530
@@ -1362,18 +1304,12 @@ memptyClassOpKey = mkPreludeMiscIdUnique 555
mappendClassOpKey = mkPreludeMiscIdUnique 556
mconcatClassOpKey = mkPreludeMiscIdUnique 557
-emptyCallStackKey :: KnownKey
-emptyCallStackKey = mkPreludeMiscIdUnique 558
-
fromStaticPtrClassOpKey :: KnownKey
fromStaticPtrClassOpKey = mkPreludeMiscIdUnique 560
makeStaticKey :: KnownKey
makeStaticKey = mkPreludeMiscIdUnique 561
-emptyExceptionContextKey :: KnownKey
-emptyExceptionContextKey = mkPreludeMiscIdUnique 562
-
-- Unsafe coercion proofs
unsafeEqualityProofIdKey, unsafeCoercePrimIdKey :: KnownKey
unsafeEqualityProofIdKey = mkPreludeMiscIdUnique 570
=====================================
compiler/GHC/Builtin/KnownOccs.hs
=====================================
@@ -204,6 +204,16 @@ fromStaticPtrClassOpOcc, newStablePtrIdOcc :: KnownOcc
fromStaticPtrClassOpOcc = mkVarOcc "fromStaticPtr"
newStablePtrIdOcc = mkVarOcc "newStablePtr"
+staticPtrTyConOcc, staticPtrDataConOcc, staticPtrInfoDataConOcc :: KnownOcc
+staticPtrTyConOcc = mkTcOcc "StaticPtr"
+staticPtrDataConOcc = mkDataOcc "StaticPtr"
+staticPtrInfoDataConOcc = mkDataOcc "StaticPtrInfo"
+
+knownNatClassOcc, knownSymbolClassOcc, knownCharClassOcc :: KnownOcc
+knownNatClassOcc = mkTcOcc "KnownNat"
+knownSymbolClassOcc = mkTcOcc "KnownSymbol"
+knownCharClassOcc = mkTcOcc "KnownChar"
+
returnIOIdOcc, bindIOIdOcc, thenIOIdOcc,
printIdOcc, ioTyConOcc, ioDataConOcc :: KnownOcc
returnIOIdOcc = mkVarOcc "returnIO"
@@ -321,15 +331,6 @@ traceIdOcc = mkVarOcc "trace"
assertErrorIdOcc :: KnownOcc
assertErrorIdOcc = mkVarOcc "assertError"
--- KindReps for common cases
--- See Note [Grand plan for Typeable] (GPT6) in GHC.Tc.Instance.Typeable.
-starKindRepIdOcc, starArrStarKindRepIdOcc,
- starArrStarArrStarKindRepIdOcc, constraintKindRepIdOcc :: KnownOcc
-starKindRepIdOcc = mkVarOcc "krepStar"
-starArrStarKindRepIdOcc = mkVarOcc "krepArrStar"
-starArrStarArrStarKindRepIdOcc = mkVarOcc "krepStarArrStarArrStarKind"
-constraintKindRepIdOcc = mkVarOcc "krepConstraint"
-
-- ghci
ghciIoClassOcc, ghciStepIoMOcc :: KnownOcc
ghciIoClassOcc = mkTcOcc "GHCiSandboxIO"
@@ -340,9 +341,14 @@ toAnnotationWrapperIdOcc :: KnownOcc
toAnnotationWrapperIdOcc = mkVarOcc "toAnnotationWrapper"
-- CallStacks/Source locations
-pushCallStackIdOcc, srcLocDataConOcc :: KnownOcc
-pushCallStackIdOcc = mkVarOcc "pushCallStack"
-srcLocDataConOcc = mkDataOcc "SrcLoc"
+emptyCallStackIdOcc, pushCallStackIdOcc, srcLocDataConOcc :: KnownOcc
+emptyCallStackIdOcc = mkVarOcc "emptyCallStack"
+pushCallStackIdOcc = mkVarOcc "pushCallStack"
+srcLocDataConOcc = mkDataOcc "SrcLoc"
+
+-- ExceptionContext
+emptyExceptionContextIdOcc :: KnownOcc
+emptyExceptionContextIdOcc = mkVarOcc "emptyExceptionContext"
{- *********************************************************************
* *
=====================================
compiler/GHC/Core/Type.hs
=====================================
@@ -244,7 +244,7 @@ import {-# SOURCE #-} GHC.Builtin.WiredIn.Types
, manyDataConTy, oneDataConTy
, liftedRepTy, unliftedRepTy, zeroBitRepTy )
-import GHC.Types.Name( Name )
+import GHC.Types.Name( Name, hasKnownKey )
import GHC.Builtin.KnownKeys
import GHC.Core.Coercion.Axiom
@@ -1226,21 +1226,21 @@ pprUserTypeErrorTy ty =
-- Text "Something"
Just (tc,[txt])
- | tyConName tc == typeErrorTextDataConName
+ | tc `hasKnownKey` typeErrorTextDataConKey
, Just str <- isStrLitTy txt -> ftext str
-- ShowType t
Just (tc,[_k,t])
- | tyConName tc == typeErrorShowTypeDataConName -> ppr t
+ | tc `hasKnownKey` typeErrorShowTypeDataConKey -> ppr t
-- t1 :<>: t2
Just (tc,[t1,t2])
- | tyConName tc == typeErrorAppendDataConName ->
+ | tc `hasKnownKey` typeErrorAppendDataConKey ->
pprUserTypeErrorTy t1 <> pprUserTypeErrorTy t2
-- t1 :$$: t2
Just (tc,[t1,t2])
- | tyConName tc == typeErrorVAppendDataConName ->
+ | tc `hasKnownKey` typeErrorVAppendDataConKey ->
pprUserTypeErrorTy t1 $$ pprUserTypeErrorTy t2
-- An unevaluated type function
=====================================
compiler/GHC/Driver/Config/Tidy.hs
=====================================
@@ -17,7 +17,7 @@ import GHC.Driver.Backend
import GHC.Core.Make (getMkStringIds)
import GHC.Builtin.KnownKeys
-import GHC.Tc.Utils.Env (lookupGlobal, lookupKnownKeyGlobal)
+import GHC.Tc.Utils.Env (lookupKnownKeyGlobal)
import GHC.Types.TyThing
import GHC.Platform.Ways
@@ -48,8 +48,8 @@ initStaticPtrOpts hsc_env = do
let dflags = hsc_dflags hsc_env
mk_string <- getMkStringIds (fmap tyThingId . lookupKnownKeyGlobal hsc_env)
- static_ptr_info_datacon <- tyThingDataCon <$> lookupGlobal hsc_env staticPtrInfoDataConName
- static_ptr_datacon <- tyThingDataCon <$> lookupGlobal hsc_env staticPtrDataConName
+ static_ptr_info_datacon <- tyThingDataCon <$> lookupKnownKeyGlobal hsc_env staticPtrInfoDataConKey
+ static_ptr_datacon <- tyThingDataCon <$> lookupKnownKeyGlobal hsc_env staticPtrDataConKey
pure $ StaticPtrOpts
{ opt_platform = targetPlatform dflags
=====================================
compiler/GHC/Stg/BcPrep.hs
=====================================
@@ -14,7 +14,6 @@ module GHC.Stg.BcPrep ( bcPrep ) where
import GHC.Prelude
-import GHC.Types.Id.Make
import GHC.Types.Id
import GHC.Core.Type
=====================================
compiler/GHC/StgToJS/Apply.hs
=====================================
@@ -111,7 +111,7 @@ genApp ctx i args
-- We detect if the Id is unsafeUnpackJSStringUtf8## applied to a string literal,
-- if so then we convert the unsafeUnpack to a call to h$decode.
| [StgVarArg v] <- args
- , idName i == unsafeUnpackJSStringUtf8ShShName
+ , i `hasKnownKey` unsafeUnpackJSStringUtf8ShShKey
-- See: https://gitlab.haskell.org/ghc/ghc/-/merge_requests/10588
-- Comment by Josh Meredith
participants (1)
-
Rodrigo Mesquita (@alt-romes)