Documentation ¶
Index ¶
- Constants
- Variables
- func HasSameSignature(a []ValueType, b []ValueType) bool
- type BlockType
- type CodeSegment
- type ConstantExpression
- type DataSegment
- type ElementSegment
- type Engine
- type ExportDesc
- type ExportInstance
- type ExportKind
- type ExportSegment
- type FunctionInstance
- type FunctionInstanceBlock
- type FunctionType
- type GlobalInstance
- type GlobalSegment
- type GlobalType
- type HostFunctionCallContext
- type ImportDesc
- type ImportKind
- type ImportSegment
- type LimitsType
- type MemoryInstance
- type MemoryType
- type Module
- type ModuleInstance
- type OptCode
- type Reader
- type SectionID
- type Store
- func (s *Store) AddGlobal(moduleName, name string, value uint64, valueType ValueType, mutable bool) error
- func (s *Store) AddHostFunction(moduleName, funcName string, fn reflect.Value) error
- func (s *Store) AddMemoryInstance(moduleName, name string, min uint32, max *uint32) error
- func (s *Store) AddTableInstance(moduleName, name string, min uint32, max *uint32) error
- func (s *Store) CallFunction(moduleName, funcName string, args ...uint64) (returns []uint64, returnTypes []ValueType, err error)
- func (s *Store) Instantiate(module *Module, name string) error
- type TableInstance
- type TableInstanceElm
- type TableType
- type ValueType
Constants ¶
View Source
const PageSize uint64 = 65536
Variables ¶
Functions ¶
func HasSameSignature ¶
Types ¶
type BlockType ¶
type BlockType = FunctionType
type CodeSegment ¶
type ConstantExpression ¶
type DataSegment ¶
type DataSegment struct { MemoryIndex uint32 // supposed to be zero OffsetExpression *ConstantExpression Init []byte }
type ElementSegment ¶
type ElementSegment struct { TableIndex uint32 OffsetExpr *ConstantExpression Init []uint32 }
type Engine ¶
type Engine interface { Call(f *FunctionInstance, args ...uint64) (returns []uint64, err error) Compile(f *FunctionInstance) error }
type ExportDesc ¶
type ExportInstance ¶
type ExportInstance struct { Kind byte Function *FunctionInstance Global *GlobalInstance Memory *MemoryInstance Table *TableInstance }
type ExportKind ¶
type ExportKind = byte
const ( ExportKindFunction ExportKind = 0x00 ExportKindTable ExportKind = 0x01 ExportKindMemory ExportKind = 0x02 ExportKindGlobal ExportKind = 0x03 )
type ExportSegment ¶
type ExportSegment struct { Name string Desc *ExportDesc }
type FunctionInstance ¶
type FunctionInstance struct { Name string ModuleInstance *ModuleInstance Body []byte Signature *FunctionType NumLocals uint32 LocalTypes []ValueType Blocks map[uint64]*FunctionInstanceBlock HostFunction *reflect.Value }
type FunctionInstanceBlock ¶
type FunctionInstanceBlock struct {
StartAt, ElseAt, EndAt uint64
BlockType *FunctionType
BlockTypeBytes uint64
IsLoop bool // TODO: might not be necessary
IsIf bool // TODO: might not be necessary
}
type FunctionType ¶
type FunctionType struct {
InputTypes, ReturnTypes []ValueType
}
type GlobalInstance ¶
type GlobalInstance struct { Type *GlobalType Val uint64 }
type GlobalSegment ¶
type GlobalSegment struct { Type *GlobalType Init *ConstantExpression }
type GlobalType ¶
type HostFunctionCallContext ¶
type HostFunctionCallContext struct {
Memory *MemoryInstance
}
type ImportDesc ¶
type ImportDesc struct { Kind byte TypeIndexPtr *uint32 TableTypePtr *TableType MemTypePtr *MemoryType GlobalTypePtr *GlobalType }
type ImportKind ¶
type ImportKind = byte
const ( ImportKindFunction ImportKind = 0x00 ImportKindTable ImportKind = 0x01 ImportKindMemory ImportKind = 0x02 ImportKindGlobal ImportKind = 0x03 )
type ImportSegment ¶
type ImportSegment struct {
Module, Name string
Desc *ImportDesc
}
type LimitsType ¶
type MemoryInstance ¶
type MemoryType ¶
type MemoryType = LimitsType
type Module ¶
type Module struct { TypeSection []*FunctionType ImportSection []*ImportSegment FunctionSection []uint32 TableSection []*TableType MemorySection []*MemoryType GlobalSection []*GlobalSegment ExportSection map[string]*ExportSegment StartSection *uint32 ElementSection []*ElementSegment CodeSection []*CodeSegment DataSection []*DataSegment CustomSections map[string][]byte }
Static binary representations.
func DecodeModule ¶
DecodeModule decodes a `raw` module from io.Reader whose index spaces are yet to be initialized
type ModuleInstance ¶
type ModuleInstance struct { Exports map[string]*ExportInstance Functions []*FunctionInstance Globals []*GlobalInstance Memory *MemoryInstance Tables []*TableInstance Types []*FunctionType }
type OptCode ¶
type OptCode = byte
const ( // control instruction OptCodeUnreachable OptCode = 0x00 OptCodeNop OptCode = 0x01 OptCodeBlock OptCode = 0x02 OptCodeLoop OptCode = 0x03 OptCodeIf OptCode = 0x04 OptCodeElse OptCode = 0x05 OptCodeEnd OptCode = 0x0b OptCodeBr OptCode = 0x0c OptCodeBrIf OptCode = 0x0d OptCodeBrTable OptCode = 0x0e OptCodeReturn OptCode = 0x0f OptCodeCall OptCode = 0x10 OptCodeCallIndirect OptCode = 0x11 // parametric instruction OptCodeDrop OptCode = 0x1a OptCodeSelect OptCode = 0x1b // variable instruction OptCodeLocalGet OptCode = 0x20 OptCodeLocalSet OptCode = 0x21 OptCodeLocalTee OptCode = 0x22 OptCodeGlobalGet OptCode = 0x23 OptCodeGlobalSet OptCode = 0x24 // memory instruction OptCodeI32Load OptCode = 0x28 OptCodeI64Load OptCode = 0x29 OptCodeF32Load OptCode = 0x2a OptCodeF64Load OptCode = 0x2b OptCodeI32Load8s OptCode = 0x2c OptCodeI32Load8u OptCode = 0x2d OptCodeI32Load16s OptCode = 0x2e OptCodeI32Load16u OptCode = 0x2f OptCodeI64Load8s OptCode = 0x30 OptCodeI64Load8u OptCode = 0x31 OptCodeI64Load16s OptCode = 0x32 OptCodeI64Load16u OptCode = 0x33 OptCodeI64Load32s OptCode = 0x34 OptCodeI64Load32u OptCode = 0x35 OptCodeI32Store OptCode = 0x36 OptCodeI64Store OptCode = 0x37 OptCodeF32Store OptCode = 0x38 OptCodeF64Store OptCode = 0x39 OptCodeI32Store8 OptCode = 0x3a OptCodeI32Store16 OptCode = 0x3b OptCodeI64Store8 OptCode = 0x3c OptCodeI64Store16 OptCode = 0x3d OptCodeI64Store32 OptCode = 0x3e OptCodeMemorySize OptCode = 0x3f OptCodeMemoryGrow OptCode = 0x40 // const instructions. OptCodeI32Const OptCode = 0x41 OptCodeI64Const OptCode = 0x42 OptCodeF32Const OptCode = 0x43 OptCodeF64Const OptCode = 0x44 // numeric instructions. OptCodeI32eqz OptCode = 0x45 OptCodeI32eq OptCode = 0x46 OptCodeI32ne OptCode = 0x47 OptCodeI32lts OptCode = 0x48 OptCodeI32ltu OptCode = 0x49 OptCodeI32gts OptCode = 0x4a OptCodeI32gtu OptCode = 0x4b OptCodeI32les OptCode = 0x4c OptCodeI32leu OptCode = 0x4d OptCodeI32ges OptCode = 0x4e OptCodeI32geu OptCode = 0x4f OptCodeI64eqz OptCode = 0x50 OptCodeI64eq OptCode = 0x51 OptCodeI64ne OptCode = 0x52 OptCodeI64lts OptCode = 0x53 OptCodeI64ltu OptCode = 0x54 OptCodeI64gts OptCode = 0x55 OptCodeI64gtu OptCode = 0x56 OptCodeI64les OptCode = 0x57 OptCodeI64leu OptCode = 0x58 OptCodeI64ges OptCode = 0x59 OptCodeI64geu OptCode = 0x5a OptCodeF32eq OptCode = 0x5b OptCodeF32ne OptCode = 0x5c OptCodeF32lt OptCode = 0x5d OptCodeF32gt OptCode = 0x5e OptCodeF32le OptCode = 0x5f OptCodeF32ge OptCode = 0x60 OptCodeF64eq OptCode = 0x61 OptCodeF64ne OptCode = 0x62 OptCodeF64lt OptCode = 0x63 OptCodeF64gt OptCode = 0x64 OptCodeF64le OptCode = 0x65 OptCodeF64ge OptCode = 0x66 OptCodeI32clz OptCode = 0x67 OptCodeI32ctz OptCode = 0x68 OptCodeI32popcnt OptCode = 0x69 OptCodeI32add OptCode = 0x6a OptCodeI32sub OptCode = 0x6b OptCodeI32mul OptCode = 0x6c OptCodeI32divs OptCode = 0x6d OptCodeI32divu OptCode = 0x6e OptCodeI32rems OptCode = 0x6f OptCodeI32remu OptCode = 0x70 OptCodeI32and OptCode = 0x71 OptCodeI32or OptCode = 0x72 OptCodeI32xor OptCode = 0x73 OptCodeI32shl OptCode = 0x74 OptCodeI32shrs OptCode = 0x75 OptCodeI32shru OptCode = 0x76 OptCodeI32rotl OptCode = 0x77 OptCodeI32rotr OptCode = 0x78 OptCodeI64clz OptCode = 0x79 OptCodeI64ctz OptCode = 0x7a OptCodeI64popcnt OptCode = 0x7b OptCodeI64add OptCode = 0x7c OptCodeI64sub OptCode = 0x7d OptCodeI64mul OptCode = 0x7e OptCodeI64divs OptCode = 0x7f OptCodeI64divu OptCode = 0x80 OptCodeI64rems OptCode = 0x81 OptCodeI64remu OptCode = 0x82 OptCodeI64and OptCode = 0x83 OptCodeI64or OptCode = 0x84 OptCodeI64xor OptCode = 0x85 OptCodeI64shl OptCode = 0x86 OptCodeI64shrs OptCode = 0x87 OptCodeI64shru OptCode = 0x88 OptCodeI64rotl OptCode = 0x89 OptCodeI64rotr OptCode = 0x8a OptCodeF32abs OptCode = 0x8b OptCodeF32neg OptCode = 0x8c OptCodeF32ceil OptCode = 0x8d OptCodeF32floor OptCode = 0x8e OptCodeF32trunc OptCode = 0x8f OptCodeF32nearest OptCode = 0x90 OptCodeF32sqrt OptCode = 0x91 OptCodeF32add OptCode = 0x92 OptCodeF32sub OptCode = 0x93 OptCodeF32mul OptCode = 0x94 OptCodeF32div OptCode = 0x95 OptCodeF32min OptCode = 0x96 OptCodeF32max OptCode = 0x97 OptCodeF32copysign OptCode = 0x98 OptCodeF64abs OptCode = 0x99 OptCodeF64neg OptCode = 0x9a OptCodeF64ceil OptCode = 0x9b OptCodeF64floor OptCode = 0x9c OptCodeF64trunc OptCode = 0x9d OptCodeF64nearest OptCode = 0x9e OptCodeF64sqrt OptCode = 0x9f OptCodeF64add OptCode = 0xa0 OptCodeF64sub OptCode = 0xa1 OptCodeF64mul OptCode = 0xa2 OptCodeF64div OptCode = 0xa3 OptCodeF64min OptCode = 0xa4 OptCodeF64max OptCode = 0xa5 OptCodeF64copysign OptCode = 0xa6 OptCodeI32wrapI64 OptCode = 0xa7 OptCodeI32truncf32s OptCode = 0xa8 OptCodeI32truncf32u OptCode = 0xa9 OptCodeI32truncf64s OptCode = 0xaa OptCodeI32truncf64u OptCode = 0xab OptCodeI64Extendi32s OptCode = 0xac OptCodeI64Extendi32u OptCode = 0xad OptCodeI64TruncF32s OptCode = 0xae OptCodeI64TruncF32u OptCode = 0xaf OptCodeI64Truncf64s OptCode = 0xb0 OptCodeI64Truncf64u OptCode = 0xb1 OptCodeF32Converti32s OptCode = 0xb2 OptCodeF32Converti32u OptCode = 0xb3 OptCodeF32Converti64s OptCode = 0xb4 OptCodeF32Converti64u OptCode = 0xb5 OptCodeF32Demotef64 OptCode = 0xb6 OptCodeF64Converti32s OptCode = 0xb7 OptCodeF64Converti32u OptCode = 0xb8 OptCodeF64Converti64s OptCode = 0xb9 OptCodeF64Converti64u OptCode = 0xba OptCodeF64Promotef32 OptCode = 0xbb OptCodeI32reinterpretf32 OptCode = 0xbc OptCodeI64reinterpretf64 OptCode = 0xbd OptCodeF32reinterpreti32 OptCode = 0xbe OptCodeF64reinterpreti64 OptCode = 0xbf )
type SectionID ¶
type SectionID = byte
const ( SectionIDCustom SectionID = 0 SectionIDType SectionID = 1 SectionIDImport SectionID = 2 SectionIDFunction SectionID = 3 SectionIDTable SectionID = 4 SectionIDMemory SectionID = 5 SectionIDGlobal SectionID = 6 SectionIDExport SectionID = 7 SectionIDStart SectionID = 8 SectionIDElement SectionID = 9 SectionIDCode SectionID = 10 SectionIDData SectionID = 11 )
type Store ¶
type Store struct { ModuleInstances map[string]*ModuleInstance Functions []*FunctionInstance Globals []*GlobalInstance Memories []*MemoryInstance Tables []*TableInstance // contains filtered or unexported fields }
func (*Store) AddHostFunction ¶
func (*Store) AddMemoryInstance ¶
func (*Store) AddTableInstance ¶
func (*Store) CallFunction ¶
type TableInstance ¶
type TableInstance struct { Table []*TableInstanceElm Min uint32 Max *uint32 ElemType byte }
type TableInstanceElm ¶
type TableInstanceElm struct {
Function *FunctionInstance
}
type TableType ¶
type TableType struct { ElemType byte Limit *LimitsType }
Source Files ¶
Click to show internal directories.
Click to hide internal directories.