| ghc-6.10.4: The GHC API | Contents | Index

Literal

Contents

Main data type
  Creating Literals
  Operations on Literals
  Predicates on Literals and their contents
  Coercions

Synopsis

data Literal

= MachChar Char
| MachStr FastString
| MachNullAddr
| MachInt Integer
| MachInt64 Integer
| MachWord Integer
| MachWord64 Integer
| MachFloat Rational
| MachDouble Rational
| MachLabel FastString (Maybe Int) FunctionOrData

mkMachInt :: Integer -> Literal
mkMachWord :: Integer -> Literal
mkMachInt64 :: Integer -> Literal
mkMachWord64 :: Integer -> Literal
mkMachFloat :: Rational -> Literal
mkMachDouble :: Rational -> Literal
mkMachChar :: Char -> Literal
mkMachString :: String -> Literal
litSize :: Literal -> Int
literalType :: Literal -> Type
hashLiteral :: Literal -> Int
litIsDupable :: Literal -> Bool
litIsTrivial :: Literal -> Bool
inIntRange :: Integer -> Bool
inWordRange :: Integer -> Bool
tARGET_MAX_INT :: Integer
inCharRange :: Char -> Bool
isZeroLit :: Literal -> Bool
litFitsInChar :: Literal -> Bool
word2IntLit :: Literal -> Literal
int2WordLit :: Literal -> Literal
narrow8IntLit :: Literal -> Literal
narrow16IntLit :: Literal -> Literal
narrow32IntLit :: Literal -> Literal
narrow8WordLit :: Literal -> Literal
narrow16WordLit :: Literal -> Literal
narrow32WordLit :: Literal -> Literal
char2IntLit :: Literal -> Literal
int2CharLit :: Literal -> Literal
float2IntLit :: Literal -> Literal
int2FloatLit :: Literal -> Literal
double2IntLit :: Literal -> Literal
int2DoubleLit :: Literal -> Literal
nullAddrLit :: Literal
float2DoubleLit :: Literal -> Literal
double2FloatLit :: Literal -> Literal

Main data type
data Literal

So-called `Literal`s 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) FunctionOrData | 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

Eq Literal
Ord Literal
Show Literal
Outputable Literal
Binary Literal

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
inIntRange :: Integer -> Bool
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
word2IntLit :: Literal -> Literal
int2WordLit :: Literal -> Literal
narrow8IntLit :: Literal -> Literal
narrow16IntLit :: Literal -> Literal
narrow32IntLit :: Literal -> Literal
narrow8WordLit :: Literal -> Literal
narrow16WordLit :: Literal -> Literal
narrow32WordLit :: Literal -> Literal
char2IntLit :: Literal -> Literal
int2CharLit :: Literal -> Literal
float2IntLit :: Literal -> Literal
int2FloatLit :: Literal -> Literal
double2IntLit :: Literal -> Literal
int2DoubleLit :: Literal -> Literal
nullAddrLit :: Literal
float2DoubleLit :: Literal -> Literal
double2FloatLit :: Literal -> Literal
Produced by Haddock version 2.4.2