YhcSource codeContentsIndex
ByteCode.Graph
Contents
Bytecode graph conversion
Graph state monad
Description

Converts the jump and label linear instruction list into a flow graph, this aids later optimisation and memory phases.

It also includes the code for the graph monad which is used extensively in later analysis processes.

Synopsis
bcGraph :: BCModule -> BCModule
data GState x = GState {
gsStart :: GLabel
gsGraph :: Graph
gsJumpers :: Jumpers
gsExtra :: x
}
type GraphMonad x a = State (GState x) a
gGetStart :: GraphMonad x GLabel
gSetStart :: GLabel -> GraphMonad x ()
gGetLabels :: GraphMonad x [GLabel]
gGetNode :: GLabel -> GraphMonad x GraphNode
gSetNode :: GLabel -> GraphNode -> GraphMonad x ()
gGetJumpers :: GLabel -> GraphMonad x (Set GLabel)
gSetJumpers :: GLabel -> Set GLabel -> GraphMonad x ()
gAddJumpers :: GLabel -> Set GLabel -> GraphMonad x ()
gRemoveJumpers :: GLabel -> Set GLabel -> GraphMonad x ()
gAlwaysReturns :: GLabel -> GraphMonad x Bool
gReadX :: (x -> a) -> GraphMonad x a
gWriteX :: (x -> (x, a)) -> GraphMonad x a
gWriteX_ :: (x -> x) -> GraphMonad x ()
module StateMonad
Bytecode graph conversion
bcGraph :: BCModule -> BCModule
Turn linear bytecode into a graph representation.
Graph state monad
data GState x
Generic graph monad state
Constructors
GState
gsStart :: GLabel
gsGraph :: Graph
gsJumpers :: Jumpers
gsExtra :: x
type GraphMonad x a = State (GState x) a
A graph monad with a given extra state, returning a given value
gGetStart :: GraphMonad x GLabel
gSetStart :: GLabel -> GraphMonad x ()
gGetLabels :: GraphMonad x [GLabel]
gGetNode :: GLabel -> GraphMonad x GraphNode
gSetNode :: GLabel -> GraphNode -> GraphMonad x ()
gGetJumpers :: GLabel -> GraphMonad x (Set GLabel)
gSetJumpers :: GLabel -> Set GLabel -> GraphMonad x ()
gAddJumpers :: GLabel -> Set GLabel -> GraphMonad x ()
gRemoveJumpers :: GLabel -> Set GLabel -> GraphMonad x ()
gAlwaysReturns :: GLabel -> GraphMonad x Bool
Given a node, chase down it to see if it invariably ends up at a return without doing anything substantial on the way
gReadX :: (x -> a) -> GraphMonad x a
gWriteX :: (x -> (x, a)) -> GraphMonad x a
gWriteX_ :: (x -> x) -> GraphMonad x ()
module StateMonad
Produced by Haddock version 0.8