diff options
| author | Simon Marlow <marlowsd@gmail.com> | 2011-11-04 16:02:17 +0000 |
|---|---|---|
| committer | Simon Marlow <marlowsd@gmail.com> | 2011-11-07 09:17:33 +0000 |
| commit | 630b89551b14324fb1bfea853be700d8f32106c2 (patch) | |
| tree | eda0cecc7062ce3ff12905099d12920c3eeb8257 /compiler | |
| parent | 1ece7b27a11c6947f0ae3a11703e22b7065a6b6c (diff) | |
| download | haskell-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.hs | 8 | ||||
| -rw-r--r-- | compiler/codeGen/StgCmmProf.hs | 8 | ||||
| -rw-r--r-- | compiler/profiling/CostCentre.lhs | 16 |
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} |
