[project @ 2004-09-10 09:23:19 by simonmar]
[ghc-hetmet.git] / ghc / compiler / basicTypes / OccName.lhs
index d0b1128..2de02e7 100644 (file)
@@ -358,11 +358,11 @@ setOccNameSpace :: NameSpace -> OccName -> OccName
 setOccNameSpace sp (OccName _ occ) = OccName sp occ
 
 -- occNameFlavour is used only to generate good error messages
-occNameFlavour :: OccName -> String
-occNameFlavour (OccName DataName _)  = "Data constructor"
-occNameFlavour (OccName TvName _)    = "Type variable"
-occNameFlavour (OccName TcClsName _) = "Type constructor or class"
-occNameFlavour (OccName VarName s)   = "Variable"
+occNameFlavour :: OccName -> SDoc
+occNameFlavour (OccName DataName _)  = ptext SLIT("data constructor")
+occNameFlavour (OccName TvName _)    = ptext SLIT("type variable")
+occNameFlavour (OccName TcClsName _) = ptext SLIT("type constructor or class")
+occNameFlavour (OccName VarName s)   = empty
 
 -- briefOccNameFlavour is used in debug-printing of names
 briefOccNameFlavour :: OccName -> String
@@ -753,6 +753,19 @@ decode_num_esc d rest
     go n (c : rest) | isDigit c = go (10*n + digitToInt c) rest
     go n ('U' : rest)           = chr n : decode rest
     go n other = pprPanic "decode_num_esc" (ppr n <+> text other)
+
+decode_tuple :: Char -> EncodedString -> UserString
+decode_tuple d rest
+  = go (digitToInt d) rest
+  where
+       -- NB. recurse back to decode after decoding the tuple, because
+       -- the tuple might be embedded in a longer name.
+    go n (c : rest) | isDigit c = go (10*n + digitToInt c) rest
+    go 0 ('T':rest)    = "()" ++ decode rest
+    go n ('T':rest)    = '(' : replicate (n-1) ',' ++ ")" ++ decode rest
+    go 1 ('H':rest)    = "(# #)" ++ decode rest
+    go n ('H':rest)    = '(' : '#' : replicate (n-1) ',' ++ "#)" ++ decode rest
+    go n other = pprPanic "decode_tuple" (ppr n <+> text other)
 \end{code}
 
 
@@ -793,17 +806,6 @@ count_commas n cs    = (n,cs)
 \end{code}
 
 \begin{code}
-decode_tuple :: Char -> EncodedString -> UserString
-decode_tuple d rest
-  = go (digitToInt d) rest
-  where
-    go n (c : rest) | isDigit c = go (10*n + digitToInt c) rest
-    go 0 ['T']                 = "()"
-    go n ['T']                 = '(' : replicate (n-1) ',' ++ ")"
-    go 1 ['H']                 = "(# #)"
-    go n ['H']                 = '(' : '#' : replicate (n-1) ',' ++ "#)"
-    go n other = pprPanic "decode_tuple" (ppr n <+> text other)
-
 mkTupleOcc :: NameSpace -> Boxity -> Arity -> OccName
 mkTupleOcc ns bx ar
   = OccName ns (mkFastString ('Z' : (show ar ++ bx_char)))