Two things to do with -dsuppress-uniques
authorsimonpj@microsoft.com <unknown>
Thu, 4 Mar 2010 12:38:22 +0000 (12:38 +0000)
committersimonpj@microsoft.com <unknown>
Thu, 4 Mar 2010 12:38:22 +0000 (12:38 +0000)
a) Even with -dsuppress-uniques, don't suppress them when outputing
   code, else the assembler falls over bleating

b) Do suppress uniques in names generated by TH.  It's a bit grungy
   to do this: see Note [Suppressing uniques in OccNames].  But
   it's only needed for test de-wobblification so the grunge isn't
   really important.

compiler/basicTypes/OccName.lhs
compiler/basicTypes/Unique.lhs

index 8248b5f..172c709 100644 (file)
@@ -100,6 +100,7 @@ import UniqSet
 import FastString
 import Outputable
 import Binary
+import StaticFlags( opt_SuppressUniques )
 import Data.Char
 \end{code}
 
@@ -243,12 +244,26 @@ pprOccName :: OccName -> SDoc
 pprOccName (OccName sp occ) 
   = getPprStyle $ \ sty ->
     if codeStyle sty 
-       then ftext (zEncodeFS occ)
-       else ftext occ <> if debugStyle sty 
-                           then braces (pprNameSpaceBrief sp)
-                           else empty
+    then ftext (zEncodeFS occ)
+    else pp_occ <> pp_debug sty
+  where
+    pp_debug sty | debugStyle sty = braces (pprNameSpaceBrief sp)
+                | otherwise      = empty
+
+    pp_occ | opt_SuppressUniques = text (strip_th_unique (unpackFS occ))
+           | otherwise           = ftext occ
+
+       -- See Note [Suppressing uniques in OccNames]
+    strip_th_unique ('[' : c : _) | isAlphaNum c = []
+    strip_th_unique (c : cs) = c : strip_th_unique cs
+    strip_th_unique []       = []
 \end{code}
 
+Note [Suppressing uniques in OccNames]
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+This is a hack to de-wobblify the OccNames that contain uniques from
+Template Haskell that have been turned into a string in the OccName.
+See Note [Unique OccNames from Template Haskell] in Convert.hs
 
 %************************************************************************
 %*                                                                     *
index 1ef0ca8..6e0ee20 100644 (file)
@@ -62,7 +62,7 @@ import BasicTypes
 import FastTypes
 import FastString
 import Outputable
-import StaticFlags
+-- import StaticFlags
 
 #if defined(__GLASGOW_HASKELL__)
 --just for implementing a fast [0,61) -> Char function
@@ -215,9 +215,9 @@ We do sometimes make strings with @Uniques@ in them:
 \begin{code}
 pprUnique :: Unique -> SDoc
 pprUnique uniq
-  | opt_SuppressUniques
-  = empty      -- Used exclusively to suppress uniques so you 
-  | otherwise  -- can compare output easily
+--   | opt_SuppressUniques
+--  = empty    -- Used exclusively to suppress uniques so you 
+--  | otherwise        -- can compare output easily
   = case unpkUnique uniq of
       (tag, u) -> finish_ppr tag u (text (iToBase62 u))