module Literal
( Literal(..) -- Exported to ParseIface
, mkMachInt, mkMachWord
- , mkMachInt64, mkMachWord64
+ , mkMachInt64, mkMachWord64, mkStringLit
, litSize
, litIsDupable, litIsTrivial
- , literalType,
+ , literalType
, hashLiteral
, inIntRange, inWordRange, tARGET_MAX_INT, inCharRange
- , isZeroLit,
+ , isZeroLit
, word2IntLit, int2WordLit
, narrow8IntLit, narrow16IntLit, narrow32IntLit
= ------------------
-- 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.
mkMachInt64 x = MachInt64 x
mkMachWord64 x = MachWord64 x
+mkStringLit :: String -> Literal
+mkStringLit s = MachStr (mkFastString s) -- stored UTF-8 encoded
+
inIntRange, inWordRange :: Integer -> Bool
inIntRange x = x >= tARGET_MIN_INT && x <= tARGET_MAX_INT
inWordRange x = x >= 0 && x <= tARGET_MAX_WORD