ghc-7.7.20130829: The GHC API

Safe HaskellNone



Our extended FCode monad.



data CmmParse a Source

Does a computation in the FCode monad, with a current environment and a list of local declarations. Returns the resulting list of declarations.

unEC :: CmmParse a -> Env -> Decls -> FCode (Decls, a)Source

data Named Source

The environment contains variable definitions or blockids.


VarN CmmExpr

Holds CmmLit(CmmLabel ..) which gives the label type, eg, RtsLabel, ForeignLabel, CmmLabel etc.

FunN PackageId

A function name from this package

LabelN BlockId

A blockid of some code or data.

type Env = UniqFM NamedSource

An environment of named things.

loopDecls :: CmmParse a -> CmmParse aSource

Takes the variable decarations and imports from the monad and makes an environment, which is looped back into the computation. In this way, we can have embedded declarations that scope over the whole procedure, and imports that scope over the entire module. Discards the local declaration contained within decl'

getEnv :: CmmParse EnvSource

Get the current environment from the monad.



:: CmmType

data type

-> FastString

name of variable

-> CmmParse LocalReg

register holding the value

Create a fresh local variable of a given type.

newLabel :: FastString -> CmmParse BlockIdSource

Allocate a fresh label.



:: FastString

name of the function

-> PackageId

package of the current module

-> ExtCode 

Add add a local function to the environment.

newImport :: (FastString, CLabel) -> CmmParse ()Source

Add an imported foreign label to the list of local declarations. If this is done at the start of the module the declaration will scope over the whole module.

lookupLabel :: FastString -> CmmParse BlockIdSource

Lookup the BlockId bound to the label with this name. If one hasn't been bound yet, create a fresh one based on the Unique of the name.

lookupName :: FastString -> CmmParse CmmExprSource

Lookup the location of a named variable. Unknown names are treated as if they had been 'import'ed from the runtime system. This saves us a lot of bother in the RTS sources, at the expense of deferring some errors to link time.

code :: FCode a -> CmmParse aSource

Lift an FCode computation into the CmmParse monad