Copyright | (c) The University of Glasgow 2001 |
---|---|
License | BSD-style (see the file LICENSE) |
Maintainer | Jeffrey Young <jeffrey.young@iohk.io> Luite Stegeman <luite.stegeman@iohk.io> Sylvain Henry <sylvain.henry@iohk.io> Josh Meredith <josh.meredith@iohk.io> |
Stability | experimental |
Safe Haskell | None |
Language | Haskell2010 |
GHC.StgToJS.Types
Description
Module that holds the Types required for the StgToJS pass
Synopsis
- type G = StateT GenState IO
- data GenState = GenState {
- gsSettings :: !StgToJSConfig
- gsModule :: !Module
- gsId :: !FastMutInt
- gsIdents :: !IdCache
- gsUnfloated :: !(UniqFM Id CgStgExpr)
- gsGroup :: GenGroupState
- gsGlobal :: [JStat]
- data GenGroupState = GenGroupState {}
- data StgToJSConfig = StgToJSConfig {
- csInlinePush :: !Bool
- csInlineBlackhole :: !Bool
- csInlineLoadRegs :: !Bool
- csInlineEnter :: !Bool
- csInlineAlloc :: !Bool
- csPrettyRender :: !Bool
- csTraceRts :: !Bool
- csAssertRts :: !Bool
- csBoundsCheck :: !Bool
- csDebugAlloc :: !Bool
- csTraceForeign :: !Bool
- csProf :: !Bool
- csRuntimeAssert :: !Bool
- csContext :: !SDocContext
- data ClosureInfo = ClosureInfo {}
- data CIRegs
- = CIRegsUnknown
- | CIRegs {
- ciRegsSkip :: Int
- ciRegsTypes :: [VarType]
- data CILayout
- = CILayoutVariable
- | CILayoutUnknown {
- layoutSize :: !Int
- | CILayoutFixed {
- layoutSize :: !Int
- layout :: [VarType]
- data CIType
- = CIFun { }
- | CIThunk
- | CICon {
- citConstructor :: !Int
- | CIPap
- | CIBlackhole
- | CIStackFrame
- newtype CIStatic = CIStaticRefs {
- staticRefs :: [FastString]
- data VarType
- data IdType
- = IdPlain
- | IdEntry
- | IdConEntry
- data IdKey = IdKey !Int !Int !IdType
- data OtherSymb = OtherSymb !Module !FastString
- newtype IdCache = IdCache (Map IdKey Ident)
- newtype GlobalIdCache = GlobalIdCache (UniqFM Ident (IdKey, Id))
- data StackSlot
- = SlotId !Id !Int
- | SlotUnknown
- data StaticInfo = StaticInfo {}
- data StaticVal
- = StaticFun !FastString [StaticArg]
- | StaticThunk !(Maybe (FastString, [StaticArg]))
- | StaticUnboxed !StaticUnboxed
- | StaticData !FastString [StaticArg]
- | StaticList [StaticArg] (Maybe FastString)
- data StaticUnboxed
- data StaticArg
- data StaticLit
- = BoolLit !Bool
- | IntLit !Integer
- | NullLit
- | DoubleLit !SaneDouble
- | StringLit !FastString
- | BinLit !ByteString
- | LabelLit !Bool !FastString
- data ForeignJSRef = ForeignJSRef {}
- data LinkableUnit = LinkableUnit {
- luObjBlock :: ObjBlock
- luIdExports :: [Id]
- luOtherExports :: [FastString]
- luIdDeps :: [Id]
- luPseudoIdDeps :: [Unique]
- luOtherDeps :: [OtherSymb]
- luRequired :: Bool
- luForeignRefs :: [ForeignJSRef]
- data ObjBlock = ObjBlock {
- oiSymbols :: ![FastString]
- oiClInfo :: ![ClosureInfo]
- oiStatic :: ![StaticInfo]
- oiStat :: JStat
- oiRaw :: !ByteString
- oiFExports :: ![ExpFun]
- oiFImports :: ![ForeignJSRef]
- data ExpFun = ExpFun {}
- data JSFFIType
- data TypedExpr = TypedExpr {
- typex_typ :: !PrimRep
- typex_expr :: [JExpr]
- data PrimRes
- data ExprResult
- = ExprCont
- | ExprInline (Maybe [JExpr])
- newtype ExprValData = ExprValData [JExpr]
- data ClosureType
- ctNum :: ClosureType -> Int
- ctJsName :: ClosureType -> String
- data ThreadStatus
- threadStatusNum :: ThreadStatus -> Int
- threadStatusJsName :: ThreadStatus -> String
Documentation
The JS code generator state
Constructors
GenState | |
Fields
|
data GenGroupState #
The JS code generator state relevant for the current binding group
Constructors
GenGroupState | |
Fields
|
data StgToJSConfig #
The Configuration record for the StgToJS pass
Constructors
StgToJSConfig | |
Fields
|
data ClosureInfo #
Information relevenat to code generation for closures.
Constructors
ClosureInfo | |
Fields
|
Instances
Show ClosureInfo # | |
Defined in GHC.StgToJS.Types Methods showsPrec :: Int -> ClosureInfo -> ShowS # show :: ClosureInfo -> String # showList :: [ClosureInfo] -> ShowS # | |
Binary ClosureInfo # | |
Defined in GHC.StgToJS.Object Methods put_ :: BinHandle -> ClosureInfo -> IO () # put :: BinHandle -> ClosureInfo -> IO (Bin ClosureInfo) # get :: BinHandle -> IO ClosureInfo # | |
Eq ClosureInfo # | |
Defined in GHC.StgToJS.Types |
Closure information, ClosureInfo
, registers
Constructors
CIRegsUnknown | A value witnessing a state of unknown registers |
CIRegs | |
Fields
|
Closure Information, ClosureInfo
, layout
Constructors
CILayoutVariable | layout stored in object itself, first position from the start |
CILayoutUnknown | fixed size, but content unknown (for example stack apply frame) |
Fields
| |
CILayoutFixed | whole layout known |
Fields
|
The type of ClosureInfo
Constructors
CIFun | |
CIThunk | The closure is a THUNK |
CICon | The closure is a Constructor |
Fields
| |
CIPap | The closure is a Partial Application |
CIBlackhole | The closure is a black hole |
CIStackFrame | The closure is a stack frame |
Static references that must be kept alive
Constructors
CIStaticRefs | |
Fields
|
Free variable types
Constructors
PtrV | pointer = reference to heap object (closure object), lifted or not. Can also be some RTS object (e.g. TVar#, MVar#, MutVar#, Weak#) |
VoidV | no fields |
DoubleV | A Double: one field |
IntV | An Int (32bit because JS): one field |
LongV | A Long: two fields one for the upper 32bits, one for the lower (NB: JS is little endian) |
AddrV | a pointer not to the heap: two fields, array + index |
ObjV | some JS object, user supplied, be careful around these, can be anything |
ArrV | boxed array |
Instances
Bounded VarType # | |
Enum VarType # | |
Show VarType # | |
ToJExpr VarType # | |
Defined in GHC.StgToJS.Types | |
Binary VarType # | |
Eq VarType # | |
Ord VarType # | |
The type of identifiers. These determine the suffix of generated functions
in JS Land. For example, the entry function for the Just
constructor is a
IdConEntry
which compiles to:
function h$baseZCGHCziMaybeziJust_con_e() { return h$rs() };
which just returns whatever the stack point is pointing to. Whereas the entry
function to Just
is an IdEntry
and does the work. It compiles to:
function h$baseZCGHCziMaybeziJust_e() {
var h$$baseZCGHCziMaybezieta_8KXnScrCjF5 = h$r2;
h$r1 = h$c1(h$baseZCGHCziMaybeziJust_con_e, h$$baseZCGHCziMaybezieta_8KXnScrCjF5);
return h$rs();
};
Which loads some payload from register 2, and applies the Constructor Entry
function for the Just to the payload, returns the result in register 1 and
returns whatever is on top of the stack
Constructors
IdPlain | A plain identifier for values, no suffix added |
IdEntry | An entry function, suffix = "_e" in |
IdConEntry | A Constructor entry function, suffix = "_con_e" in |
Some other symbol
Constructors
OtherSymb !Module !FastString |
Instances
Eq OtherSymb # | |
Ord OtherSymb # | |
The identifier cache indexed on IdKey
local to a module
newtype GlobalIdCache #
The global Identifier Cache
Constructors
GlobalIdCache (UniqFM Ident (IdKey, Id)) |
A Stack Slot is either known or unknown. We avoid maybe here for more strictness.
Constructors
SlotId !Id !Int | |
SlotUnknown |
Instances
Eq StackSlot # | |
Ord StackSlot # | |
data StaticInfo #
Constructors
StaticInfo | |
Instances
Show StaticInfo # | |
Defined in GHC.StgToJS.Types Methods showsPrec :: Int -> StaticInfo -> ShowS # show :: StaticInfo -> String # showList :: [StaticInfo] -> ShowS # | |
Binary StaticInfo # | |
Defined in GHC.StgToJS.Object Methods put_ :: BinHandle -> StaticInfo -> IO () # put :: BinHandle -> StaticInfo -> IO (Bin StaticInfo) # get :: BinHandle -> IO StaticInfo # | |
Eq StaticInfo # | |
Defined in GHC.StgToJS.Types |
Constructors
StaticFun !FastString [StaticArg] | heap object for function |
StaticThunk !(Maybe (FastString, [StaticArg])) | heap object for CAF (field is Nothing when thunk is initialized in an alternative way, like string thunks through h$str) |
StaticUnboxed !StaticUnboxed | unboxed constructor (Bool, Int, Double etc) |
StaticData !FastString [StaticArg] | regular datacon app |
StaticList [StaticArg] (Maybe FastString) | list initializer (with optional tail) |
data StaticUnboxed #
Constructors
StaticUnboxedBool !Bool | |
StaticUnboxedInt !Integer | |
StaticUnboxedDouble !SaneDouble | |
StaticUnboxedString !ByteString | |
StaticUnboxedStringOffset !ByteString |
Instances
Show StaticUnboxed # | |
Defined in GHC.StgToJS.Types Methods showsPrec :: Int -> StaticUnboxed -> ShowS # show :: StaticUnboxed -> String # showList :: [StaticUnboxed] -> ShowS # | |
Binary StaticUnboxed # | |
Defined in GHC.StgToJS.Object Methods put_ :: BinHandle -> StaticUnboxed -> IO () # put :: BinHandle -> StaticUnboxed -> IO (Bin StaticUnboxed) # get :: BinHandle -> IO StaticUnboxed # | |
Eq StaticUnboxed # | |
Defined in GHC.StgToJS.Types Methods (==) :: StaticUnboxed -> StaticUnboxed -> Bool # (/=) :: StaticUnboxed -> StaticUnboxed -> Bool # | |
Ord StaticUnboxed # | |
Defined in GHC.StgToJS.Types Methods compare :: StaticUnboxed -> StaticUnboxed -> Ordering # (<) :: StaticUnboxed -> StaticUnboxed -> Bool # (<=) :: StaticUnboxed -> StaticUnboxed -> Bool # (>) :: StaticUnboxed -> StaticUnboxed -> Bool # (>=) :: StaticUnboxed -> StaticUnboxed -> Bool # max :: StaticUnboxed -> StaticUnboxed -> StaticUnboxed # min :: StaticUnboxed -> StaticUnboxed -> StaticUnboxed # |
Static Arguments. Static Arguments are things that are statically allocated, i.e., they exist at program startup. These are static heap objects or literals or things that have been floated to the top level binding by ghc.
Constructors
StaticObjArg !FastString | reference to a heap object |
StaticLitArg !StaticLit | literal |
StaticConArg !FastString [StaticArg] | unfloated constructor |
A Static literal value
Constructors
BoolLit !Bool | |
IntLit !Integer | |
NullLit | |
DoubleLit !SaneDouble | |
StringLit !FastString | |
BinLit !ByteString | |
LabelLit !Bool !FastString | is function pointer, label (also used for string / binary init) |
data ForeignJSRef #
A foreign reference to some JS code
Constructors
ForeignJSRef | |
Fields |
Instances
Binary ForeignJSRef # | |
Defined in GHC.StgToJS.Object Methods put_ :: BinHandle -> ForeignJSRef -> IO () # put :: BinHandle -> ForeignJSRef -> IO (Bin ForeignJSRef) # get :: BinHandle -> IO ForeignJSRef # |
data LinkableUnit #
data used to generate one ObjBlock in our object file
Constructors
LinkableUnit | |
Fields
|
one toplevel block in the object file
Constructors
ObjBlock | |
Fields
|
Types of FFI values
Constructors
Int8Type | |
Int16Type | |
Int32Type | |
Int64Type | |
Word8Type | |
Word16Type | |
Word32Type | |
Word64Type | |
DoubleType | |
ByteArrayType | |
PtrType | |
RefType |
Instances
Enum JSFFIType # | |
Defined in GHC.StgToJS.Types Methods succ :: JSFFIType -> JSFFIType # pred :: JSFFIType -> JSFFIType # fromEnum :: JSFFIType -> Int # enumFrom :: JSFFIType -> [JSFFIType] # enumFromThen :: JSFFIType -> JSFFIType -> [JSFFIType] # enumFromTo :: JSFFIType -> JSFFIType -> [JSFFIType] # enumFromThenTo :: JSFFIType -> JSFFIType -> JSFFIType -> [JSFFIType] # | |
Show JSFFIType # | |
Binary JSFFIType # | |
Eq JSFFIType # | |
Ord JSFFIType # | |
Typed expression
Constructors
TypedExpr | |
Fields
|
A Primop result is either an inlining of some JS payload, or a primitive call to a JS function defined in Shim files in base.
Constructors
PrimInline JStat | primop is inline, result is assigned directly |
PRPrimCall JStat | primop is async call, primop returns the next function to run. result returned to stack top in registers |
data ExprResult #
Constructors
ExprCont | |
ExprInline (Maybe [JExpr]) |
Instances
Eq ExprResult # | |
Defined in GHC.StgToJS.Types |
newtype ExprValData #
Constructors
ExprValData [JExpr] |
Instances
Eq ExprValData # | |
Defined in GHC.StgToJS.Types |
data ClosureType #
A Closure is one of six types
Constructors
Thunk | The closure is a THUNK |
Fun | The closure is a Function |
Pap | The closure is a Partial Application |
Con | The closure is a Constructor |
Blackhole | The closure is a Blackhole |
StackFrame | The closure is a stack frame |
Instances
ctNum :: ClosureType -> Int #
Convert ClosureType
to an Int
ctJsName :: ClosureType -> String #
Convert ClosureType
to a String
data ThreadStatus #
A thread is in one of 4 states
Constructors
Running | The thread is running |
Blocked | The thread is blocked |
Finished | The thread is done |
Died | The thread has died |
Instances
threadStatusNum :: ThreadStatus -> Int #
Convert the status of a thread in JS land to an Int
threadStatusJsName :: ThreadStatus -> String #
convert the status of a thread in JS land to a string