module Literal
( Literal(..) -- Exported to ParseIface
, mkMachInt, mkMachWord
- , mkMachInt64, mkMachWord64, mkStringLit,
+ , mkMachInt64, mkMachWord64, mkStringLit
, litSize
, litIsDupable, litIsTrivial
- , literalType,
+ , literalType
, hashLiteral
, inIntRange, inWordRange, tARGET_MAX_INT, inCharRange
- , isZeroLit,
+ , isZeroLit
, word2IntLit, int2WordLit
, narrow8IntLit, narrow16IntLit, narrow32IntLit
import FastString
import Binary
-import UnicodeUtil ( stringToUtf8 )
import Ratio ( numerator )
import FastString ( uniqueOfFS, lengthFS )
import DATA_INT ( Int8, Int16, Int32 )
= ------------------
-- First the primitive guys
MachChar Char -- Char# At least 31 bits
- | MachStr FastString
+
+ | MachStr FastString -- A string-literal: stored and emitted
+ -- UTF-8 encoded, we'll arrange to decode it
+ -- at runtime. Also emitted with a '\0'
+ -- terminator.
| MachNullAddr -- the NULL pointer, the only pointer value
-- that can be represented as a Literal.
mkMachWord64 x = MachWord64 x
mkStringLit :: String -> Literal
-mkStringLit s = MachStr (mkFastString (stringToUtf8 s))
+mkStringLit s = MachStr (mkFastString s) -- stored UTF-8 encoded
inIntRange, inWordRange :: Integer -> Bool
inIntRange x = x >= tARGET_MIN_INT && x <= tARGET_MAX_INT