Simon Peyton Jones pushed to branch wip/spj-reinstallable-base at Glasgow Haskell Compiler / GHC
Commits:
-
5a6fbce9
by Simon Peyton Jones at 2026-04-03T00:52:08+01:00
11 changed files:
- compiler/GHC/Builtin/Names.hs
- compiler/GHC/HsToCore/ListComp.hs
- compiler/GHC/HsToCore/Monad.hs
- compiler/GHC/HsToCore/Quote.hs
- compiler/GHC/Parser/PostProcess.hs
- compiler/GHC/Rename/Env.hs
- compiler/GHC/Tc/Deriv/Generate.hs
- compiler/GHC/Tc/Gen/Splice.hs
- compiler/GHC/ThToHs.hs
- compiler/GHC/Types/Name/Reader.hs
- compiler/GHC/Types/Unique.hs
Changes:
| ... | ... | @@ -206,7 +206,6 @@ knownKeyOccName std_uniq |
| 206 | 206 | basicKnownKeyTable :: [(OccName, KnownKeyNameKey)]
|
| 207 | 207 | basicKnownKeyTable
|
| 208 | 208 | = [ (mkTcOcc "Rational", rationalTyConKey)
|
| 209 | - , (mkTcOcc "Ord", ordClassKey)
|
|
| 210 | 209 | , (mkTcOcc "Show", showClassKey)
|
| 211 | 210 | , (mkTcOcc "Foldable", foldableClassKey)
|
| 212 | 211 | , (mkTcOcc "Traversable", traversableClassKey)
|
| ... | ... | @@ -218,9 +217,18 @@ basicKnownKeyTable |
| 218 | 217 | , (mkTcOcc "Ix", ixClassKey)
|
| 219 | 218 | , (mkTcOcc "Alternative", alternativeClassKey)
|
| 220 | 219 | |
| 221 | - -- Class Eq
|
|
| 220 | + -- Class Eq and Ord
|
|
| 222 | 221 | , (mkTcOcc "Eq", eqClassKey)
|
| 222 | + , (mkTcOcc "Ord", ordClassKey)
|
|
| 223 | 223 | , (mkVarOcc "==", eqClassOpKey)
|
| 224 | + , (mkVarOcc ">=", geClassOpKey)
|
|
| 225 | + , (mkVarOcc "<=", leClassOpKey)
|
|
| 226 | + , (mkVarOcc "<", ltClassOpKey)
|
|
| 227 | + , (mkVarOcc ">", gtClassOpKey)
|
|
| 228 | + , (mkVarOcc "compare", compareClassOpKey)
|
|
| 229 | + , (mkDataOcc "LT", ordLTDataConKey)
|
|
| 230 | + , (mkDataOcc "EQ", ordEQDataConKey)
|
|
| 231 | + , (mkDataOcc "GT", ordGTDataConKey)
|
|
| 224 | 232 | |
| 225 | 233 | -- Numeric operations
|
| 226 | 234 | , (mkTcOcc "Num", numClassKey)
|
| ... | ... | @@ -236,6 +244,7 @@ basicKnownKeyTable |
| 236 | 244 | -- Class Functor
|
| 237 | 245 | , (mkTcOcc "Functor", functorClassKey)
|
| 238 | 246 | , (mkVarOcc "fmap", fmapClassOpKey)
|
| 247 | + , (mkVarOcc "map", mapIdKey)
|
|
| 239 | 248 | |
| 240 | 249 | -- Class Monad, MonadFix, MonadZip
|
| 241 | 250 | , (mkTcOcc "Monad", monadClassKey)
|
| ... | ... | @@ -263,7 +272,7 @@ basicKnownKeyTable |
| 263 | 272 | , (mkTcOcc "IsString", isStringClassKey)
|
| 264 | 273 | , (mkVarOcc "fromString", fromStringClassOpKey)
|
| 265 | 274 | |
| 266 | - -- Stuff for pre-typechecker expansion
|
|
| 275 | + -- Records
|
|
| 267 | 276 | , (mkTcOcc "HasField", hasFieldClassKey)
|
| 268 | 277 | , (mkVarOcc "fromLabel", fromLabelClassOpKey)
|
| 269 | 278 | , (mkVarOcc "getField", getFieldClassOpKey)
|
| ... | ... | @@ -420,9 +429,6 @@ basicKnownKeyNames |
| 420 | 429 | -- Dynamic
|
| 421 | 430 | toDynName,
|
| 422 | 431 | |
| 423 | - -- Numeric stuff
|
|
| 424 | - geName,
|
|
| 425 | - |
|
| 426 | 432 | -- Conversion functions
|
| 427 | 433 | ratioTyConName, ratioDataConName,
|
| 428 | 434 | toIntegerName, toRationalName,
|
| ... | ... | @@ -458,7 +464,7 @@ basicKnownKeyNames |
| 458 | 464 | nonEmptyTyConName,
|
| 459 | 465 | |
| 460 | 466 | -- List operations
|
| 461 | - mapName, foldrName, buildName, augmentName,
|
|
| 467 | + foldrName, buildName, augmentName,
|
|
| 462 | 468 | |
| 463 | 469 | -- FFI primitive types that are not wired-in.
|
| 464 | 470 | stablePtrTyConName, ptrTyConName, funPtrTyConName, constPtrConName,
|
| ... | ... | @@ -727,6 +733,8 @@ mkMainModule_ m = mkModule mainUnit m |
| 727 | 733 | * *
|
| 728 | 734 | ************************************************************************
|
| 729 | 735 | -}
|
| 736 | +kk_RDR :: KnownKeyNameKey -> RdrName
|
|
| 737 | +kk_RDR key = knownKeyRdrName key (knownKeyOccName key)
|
|
| 730 | 738 | |
| 731 | 739 | main_RDR_Unqual :: RdrName
|
| 732 | 740 | main_RDR_Unqual = mkUnqual varName (fsLit "main")
|
| ... | ... | @@ -735,17 +743,18 @@ main_RDR_Unqual = mkUnqual varName (fsLit "main") |
| 735 | 743 | |
| 736 | 744 | ge_RDR, le_RDR, lt_RDR, gt_RDR, compare_RDR,
|
| 737 | 745 | ltTag_RDR, eqTag_RDR, gtTag_RDR :: RdrName
|
| 738 | -ge_RDR = nameRdrName geName
|
|
| 739 | -le_RDR = varQual_RDR gHC_CLASSES (fsLit "<=")
|
|
| 740 | -lt_RDR = varQual_RDR gHC_CLASSES (fsLit "<")
|
|
| 741 | -gt_RDR = varQual_RDR gHC_CLASSES (fsLit ">")
|
|
| 742 | -compare_RDR = varQual_RDR gHC_CLASSES (fsLit "compare")
|
|
| 743 | -ltTag_RDR = nameRdrName ordLTDataConName
|
|
| 744 | -eqTag_RDR = nameRdrName ordEQDataConName
|
|
| 745 | -gtTag_RDR = nameRdrName ordGTDataConName
|
|
| 746 | +eq_RDR = kk_RDR eqClassOpKey
|
|
| 747 | +ge_RDR = kk_RDR geClassOpKey
|
|
| 748 | +le_RDR = kk_RDR leClassOpKey
|
|
| 749 | +lt_RDR = kk_RDR ltClassOpKey
|
|
| 750 | +gt_RDR = kk_RDR gtClassOpKey
|
|
| 751 | +compare_RDR = kk_RDR compareClassOpKey
|
|
| 752 | +ltTag_RDR = kk_RDR ordLTDataConKey
|
|
| 753 | +eqTag_RDR = kk_RDR ordEQDataConKey
|
|
| 754 | +gtTag_RDR = kk_RDR ordGTDataConKey
|
|
| 746 | 755 | |
| 747 | 756 | map_RDR :: RdrName
|
| 748 | -map_RDR = nameRdrName mapName
|
|
| 757 | +map_RDR = kk_RDR mapIdKey
|
|
| 749 | 758 | |
| 750 | 759 | foldr_RDR, build_RDR, returnM_RDR, bindM_RDR, failM_RDR
|
| 751 | 760 | :: RdrName
|
| ... | ... | @@ -906,7 +915,7 @@ uWordHash_RDR = fieldQual_RDR gHC_INTERNAL_GENERICS (fsLit "UWord") (fsLit " |
| 906 | 915 | fmap_RDR, replace_RDR, pure_RDR, ap_RDR, liftA2_RDR, foldable_foldr_RDR,
|
| 907 | 916 | foldMap_RDR, null_RDR, all_RDR, traverse_RDR, mempty_RDR,
|
| 908 | 917 | mappend_RDR :: RdrName
|
| 909 | -fmap_RDR = nameRdrName fmapName
|
|
| 918 | +fmap_RDR = kk_RDR fmapClassOpKey
|
|
| 910 | 919 | replace_RDR = varQual_RDR gHC_INTERNAL_BASE (fsLit "<$")
|
| 911 | 920 | pure_RDR = nameRdrName pureAName
|
| 912 | 921 | ap_RDR = nameRdrName apAName
|
| ... | ... | @@ -951,7 +960,7 @@ runRWName = varQual gHC_MAGIC (fsLit "runRW#") runRWKey |
| 951 | 960 | |
| 952 | 961 | orderingTyConName, ordLTDataConName, ordEQDataConName, ordGTDataConName :: Name
|
| 953 | 962 | orderingTyConName = tcQual gHC_TYPES (fsLit "Ordering") orderingTyConKey
|
| 954 | -ordLTDataConName = dcQual gHC_TYPES (fsLit "LT") ordLTDataConKey
|
|
| 963 | +ordLTDataConName = dcQual gHC_TYPES (fsLit "LT")
|
|
| 955 | 964 | ordEQDataConName = dcQual gHC_TYPES (fsLit "EQ") ordEQDataConKey
|
| 956 | 965 | ordGTDataConName = dcQual gHC_TYPES (fsLit "GT") ordGTDataConKey
|
| 957 | 966 | |
| ... | ... | @@ -1029,12 +1038,6 @@ unpackCStringName, unpackCStringUtf8Name :: Name |
| 1029 | 1038 | unpackCStringName = varQual gHC_CSTRING (fsLit "unpackCString#") unpackCStringIdKey
|
| 1030 | 1039 | unpackCStringUtf8Name = varQual gHC_CSTRING (fsLit "unpackCStringUtf8#") unpackCStringUtf8IdKey
|
| 1031 | 1040 | |
| 1032 | --- Base classes (Eq, Ord, Functor)
|
|
| 1033 | -fmapName, geName, functorClassName :: Name
|
|
| 1034 | -geName = varQual gHC_CLASSES (fsLit ">=") geClassOpKey
|
|
| 1035 | -functorClassName = clsQual gHC_INTERNAL_BASE (fsLit "Functor") functorClassKey
|
|
| 1036 | -fmapName = varQual gHC_INTERNAL_BASE (fsLit "fmap") fmapClassOpKey
|
|
| 1037 | - |
|
| 1038 | 1041 | -- Class Monad
|
| 1039 | 1042 | thenMName, bindMName, returnMName :: Name
|
| 1040 | 1043 | thenMName = varQual gHC_INTERNAL_BASE (fsLit ">>") thenMClassOpKey
|
| ... | ... | @@ -1076,14 +1079,13 @@ considerAccessibleName = varQual gHC_MAGIC (fsLit "considerAccessible") consider |
| 1076 | 1079 | |
| 1077 | 1080 | -- Random GHC.Internal.Base functions
|
| 1078 | 1081 | fromStringName, otherwiseIdName, foldrName, buildName, augmentName,
|
| 1079 | - mapName, assertName,
|
|
| 1082 | + assertName,
|
|
| 1080 | 1083 | dollarName :: Name
|
| 1081 | 1084 | dollarName = varQual gHC_INTERNAL_BASE (fsLit "$") dollarIdKey
|
| 1082 | 1085 | otherwiseIdName = varQual gHC_INTERNAL_BASE (fsLit "otherwise") otherwiseIdKey
|
| 1083 | 1086 | foldrName = varQual gHC_INTERNAL_BASE (fsLit "foldr") foldrIdKey
|
| 1084 | 1087 | buildName = varQual gHC_INTERNAL_BASE (fsLit "build") buildIdKey
|
| 1085 | 1088 | augmentName = varQual gHC_INTERNAL_BASE (fsLit "augment") augmentIdKey
|
| 1086 | -mapName = varQual gHC_INTERNAL_BASE (fsLit "map") mapIdKey
|
|
| 1087 | 1089 | assertName = varQual gHC_INTERNAL_BASE (fsLit "assert") assertIdKey
|
| 1088 | 1090 | fromStringName = varQual gHC_INTERNAL_DATA_STRING (fsLit "fromString") fromStringClassOpKey
|
| 1089 | 1091 | |
| ... | ... | @@ -2063,7 +2065,7 @@ rootMainKey, runMainKey :: KnownKeyNameKey |
| 2063 | 2065 | rootMainKey = mkPreludeMiscIdUnique 101
|
| 2064 | 2066 | runMainKey = mkPreludeMiscIdUnique 102
|
| 2065 | 2067 | |
| 2066 | -thenIOIdKey, lazyIdKey, assertErrorIdKey, oneShotKey, runRWKey, seqHashKey :: KnownKeyNameKey
|
|
| 2068 | +thenIOIdKey, lazyIdKey, assertErrorIdKey, oneShotKey, runRWKey :: KnownKeyNameKey
|
|
| 2067 | 2069 | thenIOIdKey = mkPreludeMiscIdUnique 103
|
| 2068 | 2070 | lazyIdKey = mkPreludeMiscIdUnique 104
|
| 2069 | 2071 | assertErrorIdKey = mkPreludeMiscIdUnique 105
|
| ... | ... | @@ -2096,52 +2098,53 @@ rationalToFloatIdKey, rationalToDoubleIdKey :: KnownKeyNameKey |
| 2096 | 2098 | rationalToFloatIdKey = mkPreludeMiscIdUnique 132
|
| 2097 | 2099 | rationalToDoubleIdKey = mkPreludeMiscIdUnique 133
|
| 2098 | 2100 | |
| 2099 | -seqHashKey = mkPreludeMiscIdUnique 134
|
|
| 2100 | - |
|
| 2101 | -coerceKey :: KnownKeyNameKey
|
|
| 2102 | -coerceKey = mkPreludeMiscIdUnique 157
|
|
| 2103 | 2101 | |
| 2104 | -{-
|
|
| 2105 | -Certain class operations from Prelude classes. They get their own
|
|
| 2106 | -uniques so we can look them up easily when we want to conjure them up
|
|
| 2107 | -during type checking.
|
|
| 2108 | --}
|
|
| 2102 | +seqHashKey, coerceKey :: KnownKeyNameKey
|
|
| 2103 | +seqHashKey = mkPreludeMiscIdUnique 134
|
|
| 2104 | +coerceKey = mkPreludeMiscIdUnique 135
|
|
| 2109 | 2105 | |
| 2110 | 2106 | -- Just a placeholder for unbound variables produced by the renamer:
|
| 2111 | 2107 | unboundKey :: KnownKeyNameKey
|
| 2112 | -unboundKey = mkPreludeMiscIdUnique 158
|
|
| 2108 | +unboundKey = mkPreludeMiscIdUnique 136
|
|
| 2113 | 2109 | |
| 2114 | 2110 | fromIntegerClassOpKey, minusClassOpKey, fromRationalClassOpKey,
|
| 2115 | 2111 | enumFromClassOpKey, enumFromThenClassOpKey, enumFromToClassOpKey,
|
| 2116 | 2112 | enumFromThenToClassOpKey, eqClassOpKey, geClassOpKey, negateClassOpKey,
|
| 2117 | 2113 | bindMClassOpKey, thenMClassOpKey, returnMClassOpKey, fmapClassOpKey
|
| 2118 | 2114 | :: KnownKeyNameKey
|
| 2119 | -fromIntegerClassOpKey = mkPreludeMiscIdUnique 160
|
|
| 2120 | -minusClassOpKey = mkPreludeMiscIdUnique 161
|
|
| 2121 | -fromRationalClassOpKey = mkPreludeMiscIdUnique 162
|
|
| 2122 | -enumFromClassOpKey = mkPreludeMiscIdUnique 163
|
|
| 2123 | -enumFromThenClassOpKey = mkPreludeMiscIdUnique 164
|
|
| 2124 | -enumFromToClassOpKey = mkPreludeMiscIdUnique 165
|
|
| 2125 | -enumFromThenToClassOpKey = mkPreludeMiscIdUnique 166
|
|
| 2126 | -eqClassOpKey = mkPreludeMiscIdUnique 167
|
|
| 2127 | -geClassOpKey = mkPreludeMiscIdUnique 168
|
|
| 2128 | -negateClassOpKey = mkPreludeMiscIdUnique 169
|
|
| 2129 | -bindMClassOpKey = mkPreludeMiscIdUnique 171 -- (>>=) 02L
|
|
| 2130 | -thenMClassOpKey = mkPreludeMiscIdUnique 172 -- (>>)
|
|
| 2131 | -fmapClassOpKey = mkPreludeMiscIdUnique 173
|
|
| 2132 | -returnMClassOpKey = mkPreludeMiscIdUnique 174
|
|
| 2115 | +fromIntegerClassOpKey = mkPreludeMiscIdUnique 140
|
|
| 2116 | +minusClassOpKey = mkPreludeMiscIdUnique 141
|
|
| 2117 | +fromRationalClassOpKey = mkPreludeMiscIdUnique 142
|
|
| 2118 | +enumFromClassOpKey = mkPreludeMiscIdUnique 143
|
|
| 2119 | +enumFromThenClassOpKey = mkPreludeMiscIdUnique 144
|
|
| 2120 | +enumFromToClassOpKey = mkPreludeMiscIdUnique 145
|
|
| 2121 | +enumFromThenToClassOpKey = mkPreludeMiscIdUnique 146
|
|
| 2122 | + |
|
| 2123 | +eqClassOpKey = mkPreludeMiscIdUnique 147
|
|
| 2124 | +geClassOpKey = mkPreludeMiscIdUnique 148
|
|
| 2125 | +leClassOpKey = mkPreludeMiscIdUnique 149
|
|
| 2126 | +ltClassOpKey = mkPreludeMiscIdUnique 150
|
|
| 2127 | +gtClassOpKey = mkPreludeMiscIdUnique 151
|
|
| 2128 | +compareClassOpKey = mkPreludeMiscIdUnique 152
|
|
| 2129 | + |
|
| 2130 | + |
|
| 2131 | +negateClassOpKey = mkPreludeMiscIdUnique 153
|
|
| 2132 | +bindMClassOpKey = mkPreludeMiscIdUnique 154
|
|
| 2133 | +thenMClassOpKey = mkPreludeMiscIdUnique 155 -- (>>)
|
|
| 2134 | +fmapClassOpKey = mkPreludeMiscIdUnique 156
|
|
| 2135 | +returnMClassOpKey = mkPreludeMiscIdUnique 157
|
|
| 2133 | 2136 | |
| 2134 | 2137 | -- Recursive do notation
|
| 2135 | 2138 | mfixIdKey :: KnownKeyNameKey
|
| 2136 | -mfixIdKey = mkPreludeMiscIdUnique 175
|
|
| 2139 | +mfixIdKey = mkPreludeMiscIdUnique 158
|
|
| 2137 | 2140 | |
| 2138 | 2141 | -- MonadFail operations
|
| 2139 | 2142 | failMClassOpKey :: KnownKeyNameKey
|
| 2140 | -failMClassOpKey = mkPreludeMiscIdUnique 176
|
|
| 2143 | +failMClassOpKey = mkPreludeMiscIdUnique 159
|
|
| 2141 | 2144 | |
| 2142 | 2145 | -- fromLabel
|
| 2143 | 2146 | fromLabelClassOpKey :: KnownKeyNameKey
|
| 2144 | -fromLabelClassOpKey = mkPreludeMiscIdUnique 177
|
|
| 2147 | +fromLabelClassOpKey = mkPreludeMiscIdUnique 160
|
|
| 2145 | 2148 | |
| 2146 | 2149 | -- Arrow notation
|
| 2147 | 2150 | arrAIdKey, composeAIdKey, firstAIdKey, appAIdKey, choiceAIdKey,
|
| ... | ... | @@ -2180,6 +2183,7 @@ ghciStepIoMClassOpKey = mkPreludeMiscIdUnique 197 |
| 2180 | 2183 | isListClassKey, fromListClassOpKey, fromListNClassOpKey, toListClassOpKey :: KnownKeyNameKey
|
| 2181 | 2184 | isListClassKey = mkPreludeMiscIdUnique 198
|
| 2182 | 2185 | fromListClassOpKey = mkPreludeMiscIdUnique 199
|
| 2186 | + |
|
| 2183 | 2187 | fromListNClassOpKey = mkPreludeMiscIdUnique 500
|
| 2184 | 2188 | toListClassOpKey = mkPreludeMiscIdUnique 501
|
| 2185 | 2189 |
| ... | ... | @@ -118,7 +118,7 @@ dsTransStmt (TransStmt { trS_form = form, trS_stmts = stmts, trS_bndrs = binderM |
| 118 | 118 | |
| 119 | 119 | -- Create an unzip function for the appropriate arity and element types and find "map"
|
| 120 | 120 | unzip_stuff' <- mkUnzipBind form from_bndrs_tys
|
| 121 | - map_id <- dsLookupGlobalId mapName
|
|
| 121 | + map_id <- dsLookupKnownKeyId mapIdKey
|
|
| 122 | 122 | |
| 123 | 123 | -- Generate the expressions to build the grouped list
|
| 124 | 124 | let -- First we apply the grouping function to the inner list
|
| ... | ... | @@ -27,7 +27,7 @@ module GHC.HsToCore.Monad ( |
| 27 | 27 | dsLookupGlobal, dsLookupGlobalId, dsLookupTyCon,
|
| 28 | 28 | dsLookupDataCon, dsLookupConLike,
|
| 29 | 29 | |
| 30 | - dsLookupKnownKey, dsLookupKnownKeyTyCon, dsLookupKnownKeyId,
|
|
| 30 | + dsLookupKnownKeyTyCon, dsLookupKnownKeyId,
|
|
| 31 | 31 | |
| 32 | 32 | DsMetaEnv, DsMetaVal(..), dsGetMetaEnv, dsLookupMetaEnv, dsExtendMetaEnv,
|
| 33 | 33 | |
| ... | ... | @@ -563,13 +563,26 @@ mkNamePprCtxDs = ds_name_ppr_ctx <$> getGblEnv |
| 563 | 563 | instance MonadThings (IOEnv (Env DsGblEnv DsLclEnv)) where
|
| 564 | 564 | lookupThing = dsLookupGlobal
|
| 565 | 565 | |
| 566 | -dsLookupKnownKey :: KnownKeyNameKey -> DsM TyThing
|
|
| 567 | -dsLookupKnownKey uniq
|
|
| 566 | +dsGetKnownKeySource :: DsM KnownKeyNameSource
|
|
| 567 | +dsGetKnownKeySource
|
|
| 568 | 568 | = do { rebindable_path <- goptM Opt_RebindableKnownKeyNames
|
| 569 | - ; mb_rdr_env <- if rebindable_path
|
|
| 570 | - then do { rdr_env <- dsGetGlobalRdrEnv
|
|
| 571 | - ; return (KKNS_InScope rdr_env) }
|
|
| 572 | - else return KKNS_FromModule
|
|
| 569 | + ; if rebindable_path
|
|
| 570 | + then do { rdr_env <- dsGetGlobalRdrEnv
|
|
| 571 | + ; return (KKNS_InScope rdr_env) }
|
|
| 572 | + else return KKNS_FromModule }
|
|
| 573 | + |
|
| 574 | +dsLookupKnownKeyName :: KnownKeyNameKey -> DsM Name
|
|
| 575 | +dsLookupKnownKeyName uniq
|
|
| 576 | + = do { rebindable_path <- dsGetKnownKeySource
|
|
| 577 | + ; dsToIfL $
|
|
| 578 | + do { mb_res <- lookupKnownKeyName mb_rdr_env uniq
|
|
| 579 | + ; case mb_res of
|
|
| 580 | + Succeeded name -> return name
|
|
| 581 | + Failed msg -> failIfM (pprDiagnostic msg) } }
|
|
| 582 | + |
|
| 583 | +dsLookupKnownKeyThing :: KnownKeyNameKey -> DsM TyThing
|
|
| 584 | +dsLookupKnownKeyThing uniq
|
|
| 585 | + = do { rebindable_path <- dsGetKnownKeySource
|
|
| 573 | 586 | ; dsToIfL $
|
| 574 | 587 | do { mb_res <- lookupKnownKeyThing mb_rdr_env uniq
|
| 575 | 588 | ; case mb_res of
|
| ... | ... | @@ -578,11 +591,11 @@ dsLookupKnownKey uniq |
| 578 | 591 | |
| 579 | 592 | dsLookupKnownKeyTyCon :: KnownKeyNameKey -> DsM TyCon
|
| 580 | 593 | dsLookupKnownKeyTyCon uniq
|
| 581 | - = tyThingTyCon <$> dsLookupKnownKey uniq
|
|
| 594 | + = tyThingTyCon <$> dsLookupKnownKeyThing uniq
|
|
| 582 | 595 | |
| 583 | 596 | dsLookupKnownKeyId :: KnownKeyNameKey -> DsM Id
|
| 584 | 597 | dsLookupKnownKeyId uniq
|
| 585 | - = tyThingId <$> dsLookupKnownKey uniq
|
|
| 598 | + = tyThingId <$> dsLookupKnownKeyThing uniq
|
|
| 586 | 599 | |
| 587 | 600 | dsLookupGlobal :: Name -> DsM TyThing
|
| 588 | 601 | -- Very like GHC.Tc.Utils.Env.tcLookupGlobal
|
| ... | ... | @@ -2315,9 +2315,14 @@ lookupOccDsM n |
| 2315 | 2315 | globalVar :: Name -> DsM (Core TH.Name)
|
| 2316 | 2316 | globalVar n =
|
| 2317 | 2317 | case nameModule_maybe n of
|
| 2318 | - Just m -> globalVarExternal m (getOccName n)
|
|
| 2318 | + Just m -> globalVarExternal m (getOccName n)
|
|
| 2319 | 2319 | Nothing -> globalVarLocal (getUnique n) (getOccName n)
|
| 2320 | 2320 | |
| 2321 | +globalKnownKey :: KnonwKeyNameKey -> DsM (Core TH.Name)
|
|
| 2322 | +globalKnownKey key
|
|
| 2323 | + = do { name <- dsLookupKnownKeyName key
|
|
| 2324 | + ; globalVar name }
|
|
| 2325 | + |
|
| 2321 | 2326 | globalVarLocal :: Unique -> OccName -> DsM (Core TH.Name)
|
| 2322 | 2327 | globalVarLocal unique name
|
| 2323 | 2328 | = do { MkC occ <- occNameLit name
|
| ... | ... | @@ -3150,7 +3155,8 @@ repRdrName rdr_name = do |
| 3150 | 3155 | occ <- occNameLit occ
|
| 3151 | 3156 | repNameQ mod occ
|
| 3152 | 3157 | Orig m n -> lift $ globalVarExternal m n
|
| 3153 | - Exact n -> lift $ globalVar n
|
|
| 3158 | + Exact (ExactName n) -> lift $ globalVar n
|
|
| 3159 | + Exact (ExactKey key _) -> lift $ globalKnownKey key
|
|
| 3154 | 3160 | |
| 3155 | 3161 | repNameS :: Core String -> MetaM (Core TH.Name)
|
| 3156 | 3162 | repNameS (MkC name) = rep2_nw mkNameSName [name]
|
| ... | ... | @@ -864,7 +864,9 @@ setRdrNameSpace :: RdrName -> NameSpace -> RdrName |
| 864 | 864 | setRdrNameSpace (Unqual occ) ns = Unqual (setOccNameSpace ns occ)
|
| 865 | 865 | setRdrNameSpace (Qual m occ) ns = Qual m (setOccNameSpace ns occ)
|
| 866 | 866 | setRdrNameSpace (Orig m occ) ns = Orig m (setOccNameSpace ns occ)
|
| 867 | -setRdrNameSpace (Exact n) ns
|
|
| 867 | +setRdrNameSpace (Exact (ExactKey k o)) ns -- Highly suspicious
|
|
| 868 | + = Exact (ExactKey k (setOccNameSpace ns o))
|
|
| 869 | +setRdrNameSpace (Exact (ExactName n)) ns
|
|
| 868 | 870 | | Just thing <- wiredInNameTyThing_maybe n
|
| 869 | 871 | = setWiredInNameSpace thing ns
|
| 870 | 872 | -- Preserve Exact Names for wired-in things,
|
| ... | ... | @@ -875,7 +877,7 @@ setRdrNameSpace (Exact n) ns |
| 875 | 877 | |
| 876 | 878 | | otherwise -- This can happen when quoting and then
|
| 877 | 879 | -- splicing a fixity declaration for a type
|
| 878 | - = Exact (mkSystemNameAt (nameUnique n) occ (nameSrcSpan n))
|
|
| 880 | + = nameRdrName (mkSystemNameAt (nameUnique n) occ (nameSrcSpan n))
|
|
| 879 | 881 | where
|
| 880 | 882 | occ = setOccNameSpace ns (nameOccName n)
|
| 881 | 883 | |
| ... | ... | @@ -884,13 +886,13 @@ setWiredInNameSpace (ATyCon tc) ns |
| 884 | 886 | | isDataConNameSpace ns
|
| 885 | 887 | = ty_con_data_con tc
|
| 886 | 888 | | isTcClsNameSpace ns
|
| 887 | - = Exact (getName tc) -- No-op
|
|
| 889 | + = nameRdrName (getName tc) -- No-op
|
|
| 888 | 890 | |
| 889 | 891 | setWiredInNameSpace (AConLike (RealDataCon dc)) ns
|
| 890 | 892 | | isTcClsNameSpace ns
|
| 891 | 893 | = data_con_ty_con dc
|
| 892 | 894 | | isDataConNameSpace ns
|
| 893 | - = Exact (getName dc) -- No-op
|
|
| 895 | + = nameRdrName (getName dc) -- No-op
|
|
| 894 | 896 | |
| 895 | 897 | setWiredInNameSpace thing ns
|
| 896 | 898 | = pprPanic "setWiredinNameSpace" (pprNameSpace ns <+> ppr thing)
|
| ... | ... | @@ -899,10 +901,10 @@ ty_con_data_con :: TyCon -> RdrName |
| 899 | 901 | ty_con_data_con tc
|
| 900 | 902 | | isTupleTyCon tc
|
| 901 | 903 | , Just dc <- tyConSingleDataCon_maybe tc
|
| 902 | - = Exact (getName dc)
|
|
| 904 | + = nameRdrName (getName dc)
|
|
| 903 | 905 | |
| 904 | 906 | | tc `hasKey` listTyConKey
|
| 905 | - = Exact nilDataConName
|
|
| 907 | + = nameRdrName nilDataConName
|
|
| 906 | 908 | |
| 907 | 909 | | otherwise -- See Note [setRdrNameSpace for wired-in names]
|
| 908 | 910 | = Unqual (setOccNameSpace srcDataName (getOccName tc))
|
| ... | ... | @@ -911,10 +913,10 @@ data_con_ty_con :: DataCon -> RdrName |
| 911 | 913 | data_con_ty_con dc
|
| 912 | 914 | | let tc = dataConTyCon dc
|
| 913 | 915 | , isTupleTyCon tc
|
| 914 | - = Exact (getName tc)
|
|
| 916 | + = nameRdrName (getName tc)
|
|
| 915 | 917 | |
| 916 | 918 | | dc `hasKey` nilDataConKey
|
| 917 | - = Exact listTyConName
|
|
| 919 | + = nameRdrName listTyConName
|
|
| 918 | 920 | |
| 919 | 921 | | otherwise -- See Note [setRdrNameSpace for wired-in names]
|
| 920 | 922 | = Unqual (setOccNameSpace tcClsName (getOccName dc))
|
| ... | ... | @@ -485,8 +485,13 @@ data ExactOrOrigResult |
| 485 | 485 | -- Does the actual looking up an Exact or Orig name, see 'ExactOrOrigResult'
|
| 486 | 486 | lookupExactOrOrig_base :: RdrName -> RnM ExactOrOrigResult
|
| 487 | 487 | lookupExactOrOrig_base rdr_name
|
| 488 | - | Just n <- isExact_maybe rdr_name -- This happens in derived code
|
|
| 488 | + | Just n <- rdrNameExactName_maybe rdr_name -- This happens in derived code
|
|
| 489 | 489 | = cvtEither <$> lookupExactOcc_either n
|
| 490 | + |
|
| 491 | + | Just key <- exactKeyRdr_maybe rdr_name
|
|
| 492 | + = do { name <- rnLookupKnownKeyName key
|
|
| 493 | + ; cvtEither <$> lookupExactOcc_either name }
|
|
| 494 | + |
|
| 490 | 495 | | Just (rdr_mod, rdr_occ) <- isOrig_maybe rdr_name
|
| 491 | 496 | = do { nm <- lookupOrig rdr_mod rdr_occ
|
| 492 | 497 | |
| ... | ... | @@ -499,6 +504,7 @@ lookupExactOrOrig_base rdr_name |
| 499 | 504 | ; return $ case mb_gre of
|
| 500 | 505 | Left err -> ExactOrOrigError err
|
| 501 | 506 | Right gre -> FoundExactOrOrig gre }
|
| 507 | + |
|
| 502 | 508 | | otherwise = return NotExactOrOrig
|
| 503 | 509 | where
|
| 504 | 510 | cvtEither (Left e) = ExactOrOrigError e
|
| ... | ... | @@ -1656,17 +1656,17 @@ gen_Lift_binds loc (DerivInstTys{ dit_rep_tc = tycon |
| 1656 | 1656 | as_needed = take con_arity as_RDRs
|
| 1657 | 1657 | lift_Expr = mk_bracket finish
|
| 1658 | 1658 | con_brack :: LHsExpr GhcPs
|
| 1659 | - con_brack = nlHsApps (Exact conEName)
|
|
| 1659 | + con_brack = nlHsApps (nameRdrName conEName)
|
|
| 1660 | 1660 | [noLocA $ HsUntypedBracket noExtField
|
| 1661 | - $ VarBr noSrcSpanA True (noLocA (Exact (dataConName data_con)))]
|
|
| 1661 | + $ VarBr noSrcSpanA True (noLocA (nameRdrName (dataConName data_con)))]
|
|
| 1662 | 1662 | |
| 1663 | - finish = foldl' (\b1 b2 -> nlHsApps (Exact appEName) [b1, b2]) con_brack (map lift_var as_needed)
|
|
| 1663 | + finish = foldl' (\b1 b2 -> nlHsApps (nameRdrName appEName) [b1, b2]) con_brack (map lift_var as_needed)
|
|
| 1664 | 1664 | |
| 1665 | 1665 | lift_var :: RdrName -> LHsExpr (GhcPass 'Parsed)
|
| 1666 | 1666 | lift_var x = nlHsPar (mk_lift_expr x)
|
| 1667 | 1667 | |
| 1668 | 1668 | mk_lift_expr :: RdrName -> LHsExpr (GhcPass 'Parsed)
|
| 1669 | - mk_lift_expr x = nlHsApps (Exact liftName) [nlHsVar x]
|
|
| 1669 | + mk_lift_expr x = nlHsApps (nameRdrName liftName) [nlHsVar x]
|
|
| 1670 | 1670 | |
| 1671 | 1671 | {-
|
| 1672 | 1672 | ************************************************************************
|
| ... | ... | @@ -2612,7 +2612,7 @@ new_dc_deriv_rdr_name loc dc occ_fun |
| 2612 | 2612 | newAuxBinderRdrName :: SrcSpan -> Name -> (OccName -> OccName) -> TcM RdrName
|
| 2613 | 2613 | newAuxBinderRdrName loc parent occ_fun = do
|
| 2614 | 2614 | uniq <- newUnique
|
| 2615 | - pure $ Exact $ mkSystemNameAt uniq (occ_fun (nameOccName parent)) loc
|
|
| 2615 | + pure $ nameRdrName $ mkSystemNameAt uniq (occ_fun (nameOccName parent)) loc
|
|
| 2616 | 2616 | |
| 2617 | 2617 | -- | @getPossibleDataCons tycon tycon_args@ returns the constructors of @tycon@
|
| 2618 | 2618 | -- whose return types match when checked against @tycon_args@.
|
| ... | ... | @@ -1552,12 +1552,12 @@ instance TH.Quasi TcM where |
| 1552 | 1552 | = addErr $ TcRnTHError $ AddTopDeclsError $ InvalidTopDecl d
|
| 1553 | 1553 | |
| 1554 | 1554 | bindName :: RdrName -> TcM ()
|
| 1555 | - bindName (Exact n)
|
|
| 1555 | + bindName rdr_name
|
|
| 1556 | + | Just n <- rdrNameExactName_maybe rdr_nname
|
|
| 1556 | 1557 | = do { th_topnames_var <- fmap tcg_th_topnames getGblEnv
|
| 1557 | - ; updTcRef th_topnames_var (\ns -> extendNameSet ns n)
|
|
| 1558 | - }
|
|
| 1559 | - |
|
| 1560 | - bindName name = addErr $ TcRnTHError $ THNameError $ NonExactName name
|
|
| 1558 | + ; updTcRef th_topnames_var (\ns -> extendNameSet ns n) }
|
|
| 1559 | + | otherwise
|
|
| 1560 | + = addErr $ TcRnTHError $ THNameError $ NonExactName rdr_name
|
|
| 1561 | 1561 | |
| 1562 | 1562 | qAddForeignFilePath lang fp = do
|
| 1563 | 1563 | var <- fmap tcg_th_foreign_files getGblEnv
|
| ... | ... | @@ -1889,7 +1889,7 @@ cvtTypeKind typeOrKind ty |
| 1889 | 1889 | |
| 1890 | 1890 | hsTypeToArrow :: LHsType GhcPs -> HsMultAnn GhcPs
|
| 1891 | 1891 | hsTypeToArrow w = case unLoc w of
|
| 1892 | - HsTyVar _ _ (L _ (isExact_maybe -> Just n))
|
|
| 1892 | + HsTyVar _ _ (L _ (rdrNameExactName_maybe -> Just n))
|
|
| 1893 | 1893 | | n == oneDataConName -> HsLinearAnn noAnn
|
| 1894 | 1894 | | n == manyDataConName -> HsUnannotated (EpArrow noAnn)
|
| 1895 | 1895 | _ -> HsExplicitMult (noAnn, EpArrow noAnn) w
|
| ... | ... | @@ -2319,7 +2319,7 @@ thOrigOrExactRdrName occ th_ns pkg mod = knownOrigToExactRdrName (thOrigRdrName |
| 2319 | 2319 | knownOrigToExactRdrName :: RdrName -> RdrName
|
| 2320 | 2320 | knownOrigToExactRdrName (Orig mod occ)
|
| 2321 | 2321 | | Just name <- isKnownOrigName_maybe mod occ
|
| 2322 | - = Exact name
|
|
| 2322 | + = nameRdrName name
|
|
| 2323 | 2323 | knownOrigToExactRdrName rdr = rdr
|
| 2324 | 2324 | |
| 2325 | 2325 | -- Return an exact RdrName if we're dealing with built-in syntax.
|
| ... | ... | @@ -26,18 +26,20 @@ |
| 26 | 26 | module GHC.Types.Name.Reader (
|
| 27 | 27 | -- * The main type
|
| 28 | 28 | RdrName(..), -- Constructors exported only to GHC.Iface.Binary
|
| 29 | + ExactRdrName(..),
|
|
| 29 | 30 | |
| 30 | 31 | -- ** Construction
|
| 31 | 32 | mkRdrUnqual, mkRdrQual,
|
| 32 | 33 | mkUnqual, mkVarUnqual, mkQual, mkOrig,
|
| 33 | - nameRdrName, getRdrName,
|
|
| 34 | + nameRdrName, knownKeyRdrName, getRdrName,
|
|
| 34 | 35 | |
| 35 | 36 | -- ** Destruction
|
| 36 | 37 | rdrNameOcc, rdrNameSpace,
|
| 37 | 38 | demoteRdrName, demoteRdrNameTcCls, demoteRdrNameTv,
|
| 38 | 39 | promoteRdrName,
|
| 39 | 40 | isRdrDataCon, isRdrTyVar, isRdrTc, isQual, isQual_maybe, isUnqual,
|
| 40 | - isOrig, isOrig_maybe, isExact, isExact_maybe, isSrcRdrName,
|
|
| 41 | + isOrig, isOrig_maybe, isExact,
|
|
| 42 | + rdrNameExactName_maybe, rdrNameKnownKey_maybe, isSrcRdrName,
|
|
| 41 | 43 | |
| 42 | 44 | -- ** Preserving user-written qualification
|
| 43 | 45 | WithUserRdr(..), noUserRdr, unLocWithUserRdr, userRdrName,
|
| ... | ... | @@ -196,7 +198,7 @@ data RdrName |
| 196 | 198 | -- we want to say \"Use Prelude.map dammit\". One of these
|
| 197 | 199 | -- can be created with 'mkOrig'
|
| 198 | 200 | |
| 199 | - | Exact ExactSpec
|
|
| 201 | + | Exact ExactRdrName
|
|
| 200 | 202 | -- ^ Exact name
|
| 201 | 203 | --
|
| 202 | 204 | -- We know exactly the 'Name'. This is used:
|
| ... | ... | @@ -209,9 +211,14 @@ data RdrName |
| 209 | 211 | -- Such a 'RdrName' can be created by using 'getRdrName' on a 'Name'
|
| 210 | 212 | deriving Data
|
| 211 | 213 | |
| 212 | -data ExactSpec
|
|
| 213 | - = ExactName Name -- Use this when you know the exact Name
|
|
| 214 | - | ExactKey KnownKeyNameKey -- Use this for known-key names
|
|
| 214 | +data ExactRdrName
|
|
| 215 | + = ExactName -- Use this when you know the exact Name
|
|
| 216 | + Name
|
|
| 217 | + |
|
| 218 | + | ExactKey -- Use this for known-key names
|
|
| 219 | + KnownKeyNameKey
|
|
| 220 | + OccName -- This OccName corresponds to the key
|
|
| 221 | + |
|
| 215 | 222 | deriving Data
|
| 216 | 223 | |
| 217 | 224 | {-
|
| ... | ... | @@ -229,7 +236,8 @@ rdrNameOcc :: RdrName -> OccName |
| 229 | 236 | rdrNameOcc (Qual _ occ) = occ
|
| 230 | 237 | rdrNameOcc (Unqual occ) = occ
|
| 231 | 238 | rdrNameOcc (Orig _ occ) = occ
|
| 232 | -rdrNameOcc (Exact name) = nameOccName name
|
|
| 239 | +rdrNameOcc (Exact (ExactName name)) = nameOccName name
|
|
| 240 | +rdrNameOcc (Exact (ExactKey _ occ)) = occ
|
|
| 233 | 241 | |
| 234 | 242 | rdrNameSpace :: RdrName -> NameSpace
|
| 235 | 243 | rdrNameSpace = occNameSpace . rdrNameOcc
|
| ... | ... | @@ -291,16 +299,19 @@ mkQual sp (m, n) = Qual (mkModuleNameFS m) (mkOccNameFS sp n) |
| 291 | 299 | getRdrName :: NamedThing thing => thing -> RdrName
|
| 292 | 300 | getRdrName name = nameRdrName (getName name)
|
| 293 | 301 | |
| 302 | +knownKeyRdrName :: KnownKeyNameKey -> OccName -> RdrName
|
|
| 303 | +knownKeyRdrName key occ = Exact (ExactKey key occ)
|
|
| 304 | + |
|
| 294 | 305 | nameRdrName :: Name -> RdrName
|
| 295 | 306 | nameRdrName name = Exact (ExactName name)
|
| 296 | 307 | -- Keep the Name even for Internal names, so that the
|
| 297 | 308 | -- unique is still there for debug printing, particularly
|
| 298 | 309 | -- of Types (which are converted to IfaceTypes before printing)
|
| 299 | 310 | |
| 300 | -nukeExact :: Name -> RdrName
|
|
| 301 | -nukeExact n
|
|
| 302 | - | isExternalName n = Orig (nameModule n) (nameOccName n)
|
|
| 303 | - | otherwise = Unqual (nameOccName n)
|
|
| 311 | +-- nukeExact :: Name -> RdrName
|
|
| 312 | +-- nukeExact n
|
|
| 313 | +-- | isExternalName n = Orig (nameModule n) (nameOccName n)
|
|
| 314 | +-- | otherwise = Unqual (nameOccName n)
|
|
| 304 | 315 | |
| 305 | 316 | isRdrDataCon :: RdrName -> Bool
|
| 306 | 317 | isRdrTyVar :: RdrName -> Bool
|
| ... | ... | @@ -339,9 +350,13 @@ isExact :: RdrName -> Bool |
| 339 | 350 | isExact (Exact _) = True
|
| 340 | 351 | isExact _ = False
|
| 341 | 352 | |
| 342 | -isExact_maybe :: RdrName -> Maybe Name
|
|
| 343 | -isExact_maybe (Exact n) = Just n
|
|
| 344 | -isExact_maybe _ = Nothing
|
|
| 353 | +rdrNameExactName_maybe :: RdrName -> Maybe Name
|
|
| 354 | +rdrNameExactName_maybe (Exact (ExactName n)) = Just n
|
|
| 355 | +rdrNameExactName_maybe _ = Nothing
|
|
| 356 | + |
|
| 357 | +rdrNameKnownKey_maybe :: RdrName -> Maybe KnownKeyNameKey
|
|
| 358 | +rdrNameKnownKey_maybe (Exact (ExactKey k _)) = Just k
|
|
| 359 | +rdrNameKnownKey_maybe _ = Nothing
|
|
| 345 | 360 | |
| 346 | 361 | {-
|
| 347 | 362 | ************************************************************************
|
| ... | ... | @@ -352,7 +367,8 @@ isExact_maybe _ = Nothing |
| 352 | 367 | -}
|
| 353 | 368 | |
| 354 | 369 | instance Outputable RdrName where
|
| 355 | - ppr (Exact name) = ppr name
|
|
| 370 | + ppr (Exact (ExactName name)) = ppr name
|
|
| 371 | + ppr (Exact (ExactKey key occ)) = ppr occ <> braces (pprKnownKey key)
|
|
| 356 | 372 | ppr (Unqual occ) = ppr occ
|
| 357 | 373 | ppr (Qual mod occ) = ppr mod <> dot <> ppr occ
|
| 358 | 374 | ppr (Orig mod occ) = getPprStyle (\sty -> pprModulePrefix sty mod Nothing occ <> ppr occ)
|
| ... | ... | @@ -364,16 +380,28 @@ instance OutputableBndr RdrName where |
| 364 | 380 | |
| 365 | 381 | pprInfixOcc rdr = pprInfixVar (isSymOcc (rdrNameOcc rdr)) (ppr rdr)
|
| 366 | 382 | pprPrefixOcc rdr
|
| 367 | - | Just name <- isExact_maybe rdr = pprPrefixName name
|
|
| 383 | + | Just name <- rdrNameExactName_maybe rdr = pprPrefixName name
|
|
| 368 | 384 | -- pprPrefixName has some special cases, so
|
| 369 | 385 | -- we delegate to them rather than reproduce them
|
| 370 | 386 | | otherwise = pprPrefixVar (isSymOcc (rdrNameOcc rdr)) (ppr rdr)
|
| 371 | 387 | |
| 388 | +instance Eq ExactRdrName where
|
|
| 389 | + (ExactName n1) == (ExactName n2) = n1==n2
|
|
| 390 | + (ExactKey k1 _) == (ExactKey k2 _) = k1==k2
|
|
| 391 | + _ == _ = False
|
|
| 392 | + |
|
| 393 | +instance Ord ExactRdrName where
|
|
| 394 | + (ExactName n1) `compare` (ExactName n2) = n1 `compare` n2
|
|
| 395 | + (ExactName {}) `compare` (ExactKey {}) = LT
|
|
| 396 | + (ExactKey {}) `compare` (ExactName {}) = GT
|
|
| 397 | + (ExactKey k1 _) `compare` (ExactKey k2 _) = k1 `nonDetCmpUnique` k2
|
|
| 398 | + |
|
| 372 | 399 | instance Eq RdrName where
|
| 373 | 400 | (Exact n1) == (Exact n2) = n1==n2
|
| 401 | + |
|
| 374 | 402 | -- Convert exact to orig
|
| 375 | - (Exact n1) == r2@(Orig _ _) = nukeExact n1 == r2
|
|
| 376 | - r1@(Orig _ _) == (Exact n2) = r1 == nukeExact n2
|
|
| 403 | +-- (Exact n1) == r2@(Orig _ _) = nukeExact n1 == r2
|
|
| 404 | +-- r1@(Orig _ _) == (Exact n2) = r1 == nukeExact n2
|
|
| 377 | 405 | |
| 378 | 406 | (Orig m1 o1) == (Orig m2 o2) = m1==m2 && o1==o2
|
| 379 | 407 | (Qual m1 o1) == (Qual m2 o2) = m1==m2 && o1==o2
|
| ... | ... | @@ -471,7 +499,7 @@ lookupLocalRdrEnv (LRE { lre_env = env, lre_in_scope = ns }) rdr |
| 471 | 499 | = lookupOccEnv env occ
|
| 472 | 500 | |
| 473 | 501 | -- See Note [Local bindings with Exact Names]
|
| 474 | - | Exact name <- rdr
|
|
| 502 | + | Just name <- rdrNameExactName_maybe rdr
|
|
| 475 | 503 | , name `elemNameSet` ns
|
| 476 | 504 | = Just name
|
| 477 | 505 | |
| ... | ... | @@ -492,8 +520,9 @@ lookupLocalRdrOcc (LRE { lre_env = env }) occ = lookupOccEnv env occ |
| 492 | 520 | elemLocalRdrEnv :: RdrName -> LocalRdrEnv -> Bool
|
| 493 | 521 | elemLocalRdrEnv rdr_name (LRE { lre_env = env, lre_in_scope = ns })
|
| 494 | 522 | = case rdr_name of
|
| 495 | - Unqual occ -> occ `elemOccEnv` env
|
|
| 496 | - Exact name -> name `elemNameSet` ns -- See Note [Local bindings with Exact Names]
|
|
| 523 | + Unqual occ -> occ `elemOccEnv` env
|
|
| 524 | + Exact (ExactName name) -> name `elemNameSet` ns -- See Note [Local bindings with Exact Names]
|
|
| 525 | + Exact (ExactKey{}) -> False
|
|
| 497 | 526 | Qual {} -> False
|
| 498 | 527 | Orig {} -> False
|
| 499 | 528 |
| ... | ... | @@ -67,6 +67,7 @@ import GHC.Exts (indexCharOffAddr#, Char(..), Int(..)) |
| 67 | 67 | |
| 68 | 68 | import GHC.Word ( Word64 )
|
| 69 | 69 | import Data.Char ( chr, ord, isPrint )
|
| 70 | +import Data.Data ( Data )
|
|
| 70 | 71 | |
| 71 | 72 | import Language.Haskell.Syntax.Module.Name
|
| 72 | 73 | |
| ... | ... | @@ -128,6 +129,7 @@ Prefer `env_ut :: Char` and |
| 128 | 129 | --
|
| 129 | 130 | -- These are sometimes also referred to as \"keys\" in comments in GHC.
|
| 130 | 131 | newtype Unique = MkUnique Word64
|
| 132 | + deriving Data -- Needed only because KnownKeyNameKey is in RdrName
|
|
| 131 | 133 | |
| 132 | 134 | data UniqueTag
|
| 133 | 135 | = AlphaTyVarTag
|