From: Tim Chevalier Date: Sat, 29 Mar 2008 22:11:09 +0000 (+0000) Subject: Fix big character literal printing in External Core X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=commitdiff_plain;h=5d1ba397950bd700768933cc573f04a804f6e32a Fix big character literal printing in External Core Characters bigger than '\xff' should be represented as int literals in External Core. (This was originally fixed five years ago and broken again four and a half years ago...) --- diff --git a/compiler/coreSyn/MkExternalCore.lhs b/compiler/coreSyn/MkExternalCore.lhs index 244144c..3e8a989 100644 --- a/compiler/coreSyn/MkExternalCore.lhs +++ b/compiler/coreSyn/MkExternalCore.lhs @@ -32,6 +32,8 @@ import StaticFlags import IO import FastString +import Data.Char + emitExternalCore :: DynFlags -> NameSet -> CgGuts -> IO () emitExternalCore dflags exports cg_guts | opt_EmitExternalCore @@ -160,7 +162,12 @@ make_alt a@(DEFAULT,_ ,_) = pprPanic ("MkExternalCore: make_alt: DEFAULT " make_lit :: Literal -> C.Lit make_lit l = case l of - MachChar i -> C.Lchar i t + -- Note that we need to check whether the character is "big". + -- External Core only allows character literals up to '\xff'. + MachChar i | i <= chr 0xff -> C.Lchar i t + -- For a character bigger than 0xff, we represent it in ext-core + -- as an int lit with a char type. + MachChar i -> C.Lint (fromIntegral $ ord i) t MachStr s -> C.Lstring (unpackFS s) t MachNullAddr -> C.Lint 0 t MachInt i -> C.Lint i t