ghc-7.0.3: The GHC API

Literal

Contents

Synopsis

Main data type

data Literal Source

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) 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.

Creating Literals

mkMachInt :: Integer -> LiteralSource

Creates a Literal of type Int#

mkMachWord :: Integer -> LiteralSource

Creates a Literal of type Word#

mkMachInt64 :: Integer -> LiteralSource

Creates a Literal of type Int64#

mkMachWord64 :: Integer -> LiteralSource

Creates a Literal of type Word64#

mkMachFloat :: Rational -> LiteralSource

Creates a Literal of type Float#

mkMachDouble :: Rational -> LiteralSource

Creates a Literal of type Double#

mkMachChar :: Char -> LiteralSource

Creates a Literal of type Char#

mkMachString :: String -> LiteralSource

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

literalType :: Literal -> TypeSource

Find the Haskell Type the literal occupies

Predicates on Literals and their contents

litIsDupable :: Literal -> BoolSource

True if code space does not go bad if we duplicate this literal Currently we treat it just like litIsTrivial

litIsTrivial :: Literal -> BoolSource

True if there is absolutely no penalty to duplicating the literal. False principally of strings

isZeroLit :: Literal -> BoolSource

Tests whether the literal represents a zero of whatever type it is

Coercions