summaryrefslogtreecommitdiff
path: root/compiler
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2011-11-04 16:02:17 +0000
committerSimon Marlow <marlowsd@gmail.com>2011-11-07 09:17:33 +0000
commit630b89551b14324fb1bfea853be700d8f32106c2 (patch)
treeeda0cecc7062ce3ff12905099d12920c3eeb8257 /compiler
parent1ece7b27a11c6947f0ae3a11703e22b7065a6b6c (diff)
downloadhaskell-630b89551b14324fb1bfea853be700d8f32106c2.tar.gz
Cost centre names are now in UTF-8 (#5559)
So the .prof file will be UTF-8. This is mostly ok, except that the RTS doesn't calculate the column widths correctly (it assumes bytes = chars). hp2ps doesn't do anything sensible with Unicode strings, it just dumps the bytes into the .ps file.
Diffstat (limited to 'compiler')
-rw-r--r--compiler/codeGen/CgProf.hs8
-rw-r--r--compiler/codeGen/StgCmmProf.hs8
-rw-r--r--compiler/profiling/CostCentre.lhs16
3 files changed, 20 insertions, 12 deletions
diff --git a/compiler/codeGen/CgProf.hs b/compiler/codeGen/CgProf.hs
index 23a602c174..c961e24147 100644
--- a/compiler/codeGen/CgProf.hs
+++ b/compiler/codeGen/CgProf.hs
@@ -162,9 +162,11 @@ emitCostCentreDecl
:: CostCentre
-> Code
emitCostCentreDecl cc = do
- { label <- newStringCLit (costCentreUserName cc)
- ; modl <- newStringCLit (Module.moduleNameString
- (Module.moduleName (cc_mod cc)))
+ -- NB. bytesFS: we want the UTF-8 bytes here (#5559)
+ { label <- newByteStringCLit (bytesFS $ costCentreUserNameFS cc)
+ ; modl <- newByteStringCLit (bytesFS $ Module.moduleNameFS
+ $ Module.moduleName
+ $ cc_mod cc)
-- All cost centres will be in the main package, since we
-- don't normally use -auto-all or add SCCs to other packages.
-- Hence don't emit the package name in the module here.
diff --git a/compiler/codeGen/StgCmmProf.hs b/compiler/codeGen/StgCmmProf.hs
index 338e10428b..13c1be7f42 100644
--- a/compiler/codeGen/StgCmmProf.hs
+++ b/compiler/codeGen/StgCmmProf.hs
@@ -213,9 +213,11 @@ initCostCentres (local_CCs, ___extern_CCs, singleton_CCSs)
emitCostCentreDecl :: CostCentre -> FCode ()
emitCostCentreDecl cc = do
- { label <- newStringCLit (costCentreUserName cc)
- ; modl <- newStringCLit (Module.moduleNameString
- (Module.moduleName (cc_mod cc)))
+ -- NB. bytesFS: we want the UTF-8 bytes here (#5559)
+ { label <- newByteStringCLit (bytesFS $ costCentreUserNameFS cc)
+ ; modl <- newByteStringCLit (bytesFS $ Module.moduleNameFS
+ $ Module.moduleName
+ $ cc_mod cc)
-- All cost centres will be in the main package, since we
-- don't normally use -auto-all or add SCCs to other packages.
-- Hence don't emit the package name in the module here.
diff --git a/compiler/profiling/CostCentre.lhs b/compiler/profiling/CostCentre.lhs
index 9545b2eb89..2a44121dfd 100644
--- a/compiler/profiling/CostCentre.lhs
+++ b/compiler/profiling/CostCentre.lhs
@@ -24,7 +24,7 @@ module CostCentre (
isCafCCS, isCafCC, isSccCountCC, sccAbleCC, ccFromThisModule,
pprCostCentreCore,
- costCentreUserName,
+ costCentreUserName, costCentreUserNameFS,
cmpCostCentre -- used for removing dups in a list
) where
@@ -280,9 +280,13 @@ ppCostCentreLbl (NormalCC {cc_name = n, cc_mod = m, cc_is_caf = is_caf})
-- This is the name to go in the user-displayed string,
-- recorded in the cost centre declaration
costCentreUserName :: CostCentre -> String
-costCentreUserName (NoCostCentre) = "NO_CC"
-costCentreUserName (AllCafsCC {}) = "CAF"
-costCentreUserName (NormalCC {cc_name = name, cc_is_caf = is_caf})
- = case is_caf of { CafCC -> "CAF:"; _ -> "" } ++ unpackFS name
-
+costCentreUserName = unpackFS . costCentreUserNameFS
+
+costCentreUserNameFS :: CostCentre -> FastString
+costCentreUserNameFS (NoCostCentre) = mkFastString "NO_CC"
+costCentreUserNameFS (AllCafsCC {}) = mkFastString "CAF"
+costCentreUserNameFS (NormalCC {cc_name = name, cc_is_caf = is_caf})
+ = case is_caf of
+ CafCC -> mkFastString "CAF:" `appendFS` name
+ _ -> name
\end{code}