import Name
import PrelNames
import Module
-import LazyUniqFM
+import UniqFM
import FastString
import UniqSupply
-import FiniteMap
import BasicTypes
import SrcLoc
import MkId
import Exception ( evaluate )
import Data.IORef ( atomicModifyIORef, readIORef )
+import qualified Data.Map as Map
\end{code}
-- Build a completely new Name, and put it in the cache
Nothing -> (new_name_supply, name)
where
- (us', us1) = splitUniqSupply (nsUniqs name_supply)
- uniq = uniqFromSupply us1
+ (uniq, us') = takeUniqFromSupply (nsUniqs name_supply)
name = mkExternalName uniq mod occ loc
new_cache = extendNameCache (nsNames name_supply) mod occ name
new_name_supply = name_supply {nsUniqs = us', nsNames = new_cache}
case lookupOrigNameCache (nsNames name_cache) mod occ of {
Just name -> (name_cache, name);
Nothing ->
- let
- us = nsUniqs name_cache
- uniq = uniqFromSupply us
- name = mkExternalName uniq mod occ noSrcSpan
- new_cache = extendNameCache (nsNames name_cache) mod occ name
- in
- case splitUniqSupply us of { (us',_) -> do
- (name_cache{ nsUniqs = us', nsNames = new_cache }, name)
+ case takeUniqFromSupply (nsUniqs name_cache) of {
+ (uniq, us) ->
+ let
+ name = mkExternalName uniq mod occ noSrcSpan
+ new_cache = extendNameCache (nsNames name_cache) mod occ name
+ in (name_cache{ nsUniqs = us, nsNames = new_cache }, name)
}}}
newIPName :: IPName OccName -> TcRnIf m n (IPName Name)
ipcache = nsIPs name_cache
key = occ_name_ip -- Ensures that ?x and %x get distinct Names
in
- case lookupFM ipcache key of
+ case Map.lookup key ipcache of
Just name_ip -> (name_cache, name_ip)
Nothing -> (new_ns, name_ip)
where
- (us', us1) = splitUniqSupply (nsUniqs name_cache)
- uniq = uniqFromSupply us1
+ (uniq, us') = takeUniqFromSupply (nsUniqs name_cache)
name_ip = mapIPName (mkIPName uniq) occ_name_ip
- new_ipcache = addToFM ipcache key name_ip
+ new_ipcache = Map.insert key name_ip ipcache
new_ns = name_cache {nsUniqs = us', nsIPs = new_ipcache}
\end{code}
extendNameCache :: OrigNameCache -> Module -> OccName -> Name -> OrigNameCache
extendNameCache nc mod occ name
- = extendModuleEnv_C combine nc mod (unitOccEnv occ name)
+ = extendModuleEnvWith combine nc mod (unitOccEnv occ name)
where
- combine occ_env _ = extendOccEnv occ_env occ name
+ combine _ occ_env = extendOccEnv occ_env occ name
getNameCache :: TcRnIf a b NameCache
getNameCache = do { HscEnv { hsc_NC = nc_var } <- getTopEnv;
initNameCache us names
= NameCache { nsUniqs = us,
nsNames = initOrigNames names,
- nsIPs = emptyFM }
+ nsIPs = Map.empty }
initOrigNames :: [Name] -> OrigNameCache
initOrigNames names = foldl extendOrigNameCache emptyModuleEnv names