initPprEnv,
pCon, pLit, pMajBndr, pMinBndr, pOcc, pPrim, pSCC, pStyle,
- pTy, pTyVar, pUVar, pUse
+ pTy, pTyVar, pUVar, pUse,
+
+ NmbrEnv(..),
+ NmbrM(..), initNmbr,
+ returnNmbr, thenNmbr,
+ mapNmbr, mapAndUnzipNmbr
+-- nmbr1, nmbr2, nmbr3
+-- rnumValVar, rnumTyVar, rnumUVar,
+-- lookupValVar, lookupTyVar, lookupUVar
) where
import Ubiq{-uitous-}
-import Id ( DataCon(..) )
import Pretty ( Pretty(..) )
+import Unique ( initRenumberingUniques )
+import UniqFM ( emptyUFM )
import Util ( panic )
\end{code}
= PE PprStyle -- stored for safe keeping
(Literal -> Pretty) -- Doing these this way saves
- (DataCon -> Pretty) -- carrying around a PprStyle
+ (Id -> Pretty) -- carrying around a PprStyle
(PrimOp -> Pretty)
(CostCentre -> Pretty)
initPprEnv
:: PprStyle
-> Maybe (Literal -> Pretty)
- -> Maybe (DataCon -> Pretty)
+ -> Maybe (Id -> Pretty)
-> Maybe (PrimOp -> Pretty)
-> Maybe (CostCentre -> Pretty)
-> Maybe (tyvar -> Pretty)
pTy (PE _ _ _ _ _ _ _ _ _ _ pp _) = pp
pUse (PE _ _ _ _ _ _ _ _ _ _ _ pp) = pp
\end{code}
+
+We tend to {\em renumber} everything before printing, so that
+we get consistent Uniques on everything from run to run.
+\begin{code}
+data NmbrEnv
+ = NmbrEnv Unique -- next "Unique" to give out for a value
+ Unique -- ... for a tyvar
+ Unique -- ... for a usage var
+ (UniqFM Id) -- mapping for value vars we know about
+ (UniqFM TyVar) -- ... for tyvars
+ (UniqFM Unique{-UVar-}) -- ... for usage vars
+
+type NmbrM a = NmbrEnv -> (NmbrEnv, a)
+
+initNmbr :: NmbrM a -> a
+initNmbr m
+ = let
+ (v1,t1,u1) = initRenumberingUniques
+ init_nmbr_env = NmbrEnv v1 t1 u1 emptyUFM emptyUFM emptyUFM
+ in
+ snd (m init_nmbr_env)
+
+returnNmbr x nenv = (nenv, x)
+
+thenNmbr m k nenv
+ = let
+ (nenv2, res) = m nenv
+ in
+ k res nenv2
+
+mapNmbr f [] = returnNmbr []
+mapNmbr f (x:xs)
+ = f x `thenNmbr` \ r ->
+ mapNmbr f xs `thenNmbr` \ rs ->
+ returnNmbr (r:rs)
+
+mapAndUnzipNmbr f [] = returnNmbr ([],[])
+mapAndUnzipNmbr f (x:xs)
+ = f x `thenNmbr` \ (r1, r2) ->
+ mapAndUnzipNmbr f xs `thenNmbr` \ (rs1, rs2) ->
+ returnNmbr (r1:rs1, r2:rs2)
+
+{-
+nmbr1 nenv thing x1
+ = let
+ (nenv1, new_x1) = x1 nenv
+ in
+ (nenv1, thing new_x1)
+
+nmbr2 nenv thing x1 x2
+ = let
+ (nenv1, new_x1) = x1 nenv
+ (nenv2, new_x2) = x2 nenv1
+ in
+ (nenv2, thing new_x1 new_x2)
+
+nmbr3 nenv thing x1 x2 x3
+ = let
+ (nenv1, new_x1) = x1 nenv
+ (nenv2, new_x2) = x2 nenv1
+ (nenv3, new_x3) = x3 nenv2
+ in
+ (nenv3, thing new_x1 new_x2 new_x3)
+-}
+
+rnumValVar = panic "rnumValVar"
+rnumTyVar = panic "rnumTyVar"
+rnumUVar = panic "rnumUVar"
+lookupValVar = panic "lookupValVar"
+lookupTyVar = panic "lookupTyVar"
+lookupUVar = panic "lookupUVar"
+\end{code}