|
|
|
|
|
|
Synopsis |
|
|
|
|
Main data type
|
|
data Literal |
So-called Literals are one of:
- An unboxed (machine) literal (MachInt, MachFloat, etc.),
which is presumed to be surrounded by appropriate constructors
(Int#, etc.), so that the overall thing makes sense.
- The literal derived from the label mentioned in a "foreign label"
declaration (MachLabel)
| Constructors | MachChar Char | Char# - at least 31 bits. Create with mkMachChar
| 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. Create with mkMachString
| MachNullAddr | The NULL pointer, the only pointer value
that can be represented as a Literal. Create
with nullAddrLit
| MachInt Integer | Int# - at least WORD_SIZE_IN_BITS bits. Create with mkMachInt
| MachInt64 Integer | Int64# - at least 64 bits. Create with mkMachInt64
| MachWord Integer | Word# - at least WORD_SIZE_IN_BITS bits. Create with mkMachWord
| MachWord64 Integer | Word64# - at least 64 bits. Create with mkMachWord64
| MachFloat Rational | Float#. Create with mkMachFloat
| MachDouble Rational | Double#. Create with mkMachDouble
| MachLabel FastString (Maybe Int) | A label literal. Parameters:
1) The name of the symbol mentioned in the declaration
2) The size (in bytes) of the arguments
the label expects. Only applicable with
stdcall labels. Just x => <x> will
be appended to label name when emitting assembly.
|
| Instances | |
|
|
Creating Literals
|
|
mkMachInt :: Integer -> Literal |
Creates a Literal of type Int#
|
|
mkMachWord :: Integer -> Literal |
Creates a Literal of type Word#
|
|
mkMachInt64 :: Integer -> Literal |
Creates a Literal of type Int64#
|
|
mkMachWord64 :: Integer -> Literal |
Creates a Literal of type Word64#
|
|
mkMachFloat :: Rational -> Literal |
Creates a Literal of type Float#
|
|
mkMachDouble :: Rational -> Literal |
Creates a Literal of type Double#
|
|
mkMachChar :: Char -> Literal |
Creates a Literal of type Char#
|
|
mkMachString :: String -> Literal |
Creates a Literal of type Addr#, which is appropriate for passing to
e.g. some of the "error" functions in GHC.Err such as GHC.Err.runtimeError
|
|
Operations on Literals
|
|
litSize :: Literal -> Int |
Finds a nominal size of a string literal. Every literal has size at least 1
|
|
literalType :: Literal -> Type |
Find the Haskell Type the literal occupies
|
|
hashLiteral :: Literal -> Int |
|
Predicates on Literals and their contents
|
|
litIsDupable :: Literal -> Bool |
True if code space does not go bad if we duplicate this literal
Currently we treat it just like litIsTrivial
|
|
litIsTrivial :: Literal -> Bool |
True if there is absolutely no penalty to duplicating the literal.
False principally of strings
|
|
inWordRange :: Integer -> Bool |
|
tARGET_MAX_INT :: Integer |
|
inCharRange :: Char -> Bool |
|
isZeroLit :: Literal -> Bool |
Tests whether the literal represents a zero of whatever type it is
|
|
litFitsInChar :: Literal -> Bool |
|
Coercions
|
|
int2WordLit :: Literal -> Literal |
|
nullAddrLit :: Literal |
|
Produced by Haddock version 2.3.0 |