#include "HsVersions.h"
import Var ( Id )
-import Name ( getOccName, occNameFS )
-import Module ( Module, moduleFS )
+import Name
+import Module ( Module )
import Outputable
import FastTypes
import FastString
mkAutoCC :: Id -> Module -> IsCafCC -> CostCentre
mkAutoCC id mod is_caf
- = NormalCC { cc_name = occNameFS (getOccName id), cc_mod = mod,
+ = NormalCC { cc_name = str, cc_mod = mod,
cc_is_dupd = OriginalCC, cc_is_caf = is_caf
}
+ where
+ name = getName id
+ -- beware: we might be making an auto CC for a compiler-generated
+ -- thing (like a CAF when -caf-all is on), so include the uniq.
+ -- See bug #249, tests prof001, prof002
+ str | isSystemName name = mkFastString (showSDoc (ppr name))
+ | otherwise = occNameFS (getOccName id)
mkAllCafsCC m = AllCafsCC { cc_mod = m }
-- Printing in an interface file or in Core generally
pprCostCentreCore (AllCafsCC {cc_mod = m})
- = text "__sccC" <+> braces (ppr_mod m)
+ = text "__sccC" <+> braces (ppr m)
pprCostCentreCore (NormalCC {cc_name = n, cc_mod = m,
cc_is_caf = caf, cc_is_dupd = dup})
= text "__scc" <+> braces (hsep [
ftext (zEncodeFS n),
- ppr_mod m,
+ ppr m,
pp_dup dup,
pp_caf caf
])
pp_caf CafCC = text "__C"
pp_caf other = empty
-ppr_mod m = ftext (zEncodeFS (moduleFS m))
-
-- Printing as a C label
ppCostCentreLbl (NoCostCentre) = text "NONE_cc"
ppCostCentreLbl (AllCafsCC {cc_mod = m}) = ppr m <> text "_CAFs_cc"
ppCostCentreLbl (NormalCC {cc_name = n, cc_mod = m, cc_is_caf = is_caf})
- = ppr_mod m <> ftext (zEncodeFS n) <>
+ = ppr m <> char '_' <> ftext (zEncodeFS n) <>
text (case is_caf of { CafCC -> "_CAF"; _ -> "" }) <> text "_cc"
-- This is the name to go in the user-displayed string,