Documentation ¶
Overview ¶
Package wasm provides functions for reading and parsing WebAssembly modules.
Index ¶
- Constants
- Variables
- func SetDebugMode(dbg bool)
- type BlockType
- type DataSegment
- type DuplicateExportError
- type ElemType
- type ElementSegment
- type ExportEntry
- type ExportNotFoundError
- type External
- type FuncImport
- type Function
- type FunctionBody
- type FunctionSig
- type GlobalEntry
- type GlobalVar
- type GlobalVarImport
- type Import
- type ImportEntry
- type InvalidCodeIndexError
- type InvalidExternalError
- type InvalidFunctionIndexError
- type InvalidGlobalIndexError
- type InvalidInitExprOpError
- type InvalidLinearMemoryIndexError
- type InvalidSectionIDError
- type InvalidTableIndexError
- type InvalidTypeConstructorError
- type InvalidValueTypeInitExprError
- type KindMismatchError
- type LocalEntry
- type Memory
- type MemoryImport
- type MissingSectionError
- type Module
- type ResizableLimits
- type ResolveFunc
- type Section
- type SectionCode
- type SectionData
- type SectionElements
- type SectionExports
- type SectionFunctions
- type SectionGlobals
- type SectionID
- type SectionImports
- type SectionMemories
- type SectionStartFunction
- type SectionTables
- type SectionTypes
- type Table
- type TableImport
- type ValueType
Constants ¶
const ( Magic uint32 = 0x6d736100 Version uint32 = 0x1 )
const TypeFunc int = -0x20
TypeFunc represents the value type of a function
Variables ¶
var ( ErrImportMutGlobal = errors.New("wasm: cannot import global mutable variable") ErrNoExportsInImportedModule = errors.New("wasm: imported module has no exports") )
var ErrEmptyInitExpr = errors.New("wasm: Initializer expression produces no value")
var ErrFunctionNoEnd = errors.New("Function body does not end with 0x0b (end)")
var ErrInvalidMagic = errors.New("wasm: Invalid magic number")
var ErrUnsupportedSection = errors.New("wasm: unsupported section")
Functions ¶
func SetDebugMode ¶
func SetDebugMode(dbg bool)
Types ¶
type BlockType ¶
type BlockType ValueType // varint7
BlockType represents the signature of a structured block
const BlockTypeEmpty BlockType = -0x40
type DataSegment ¶
type DataSegment struct { Index uint32 // The index into the global linear memory space, should always be 0 in the MVP. Offset []byte // initializer expression for computing the offset for placing elements, should return an i32 value Data []byte }
DataSegment describes a group of repeated elements that begin at a specified offset in the linear memory
type DuplicateExportError ¶
type DuplicateExportError string
func (DuplicateExportError) Error ¶
func (e DuplicateExportError) Error() string
type ElemType ¶
type ElemType int // varint7
ElemType describes the type of a table's elements
const ElemTypeAnyFunc ElemType = -0x10
ElemTypeAnyFunc descibres an any_func value
type ElementSegment ¶
type ElementSegment struct { Index uint32 // The index into the global table space, should always be 0 in the MVP. Offset []byte // initializer expression for computing the offset for placing elements, should return an i32 value Elems []uint32 }
ElementSegment describes a group of repeated elements that begin at a specified offset
type ExportEntry ¶
ExportEntry represents an exported entry by the module
type ExportNotFoundError ¶
func (ExportNotFoundError) Error ¶
func (e ExportNotFoundError) Error() string
type External ¶
type External uint8
External describes the kind of the entry being imported or exported.
type FuncImport ¶
type FuncImport struct {
Type uint32
}
type Function ¶
type Function struct { IsEnvFunc bool //is the function is a env func Name string //function name Sig *FunctionSig Body *FunctionBody }
Function represents an entry in the function index space of a module.
type FunctionBody ¶
type FunctionBody struct { Module *Module // The parent module containing this function body, for execution purposes Locals []LocalEntry Code []byte }
type FunctionSig ¶
type FunctionSig struct { // value for the 'func` type constructor Form int8 // The parameter types of the function ParamTypes []ValueType ReturnTypes []ValueType }
FunctionSig describes the signature of a declared function in a WASM module
func (FunctionSig) String ¶
func (f FunctionSig) String() string
type GlobalEntry ¶
type GlobalEntry struct { Type *GlobalVar // Type holds information about the value type and mutability of the variable Init []byte // Init is an initializer expression that computes the initial value of the variable IsEnv bool // true if the Global is env import InitVal uint64 // todo init value from env outside }
GlobalEntry declares a global variable.
type GlobalVar ¶
type GlobalVar struct { Type ValueType // Type of the value stored by the variable Mutable bool // Whether the value of the variable can be changed by the set_global operator }
GlobalVar describes the type and mutability of a declared global variable
type GlobalVarImport ¶
type GlobalVarImport struct {
Type GlobalVar
}
type Import ¶
type Import interface {
// contains filtered or unexported methods
}
Import is an intreface implemented by types that can be imported by a WebAssembly module.
type ImportEntry ¶
type ImportEntry struct { ModuleName string // module name string FieldName string // field name string Kind External // If Kind is Function, Type is a FuncImport containing the type index of the function signature // If Kind is Table, Type is a TableImport containing the type of the imported table // If Kind is Memory, Type is a MemoryImport containing the type of the imported memory // If the Kind is Global, Type is a GlobalVarImport Type Import }
ImportEntry describes an import statement in a Wasm module.
type InvalidCodeIndexError ¶
type InvalidCodeIndexError int
func (InvalidCodeIndexError) Error ¶
func (e InvalidCodeIndexError) Error() string
type InvalidExternalError ¶
type InvalidExternalError uint8
func (InvalidExternalError) Error ¶
func (e InvalidExternalError) Error() string
type InvalidFunctionIndexError ¶
type InvalidFunctionIndexError uint32
func (InvalidFunctionIndexError) Error ¶
func (e InvalidFunctionIndexError) Error() string
type InvalidGlobalIndexError ¶
type InvalidGlobalIndexError uint32
func (InvalidGlobalIndexError) Error ¶
func (e InvalidGlobalIndexError) Error() string
type InvalidInitExprOpError ¶
type InvalidInitExprOpError byte
func (InvalidInitExprOpError) Error ¶
func (e InvalidInitExprOpError) Error() string
type InvalidLinearMemoryIndexError ¶
type InvalidLinearMemoryIndexError uint32
func (InvalidLinearMemoryIndexError) Error ¶
func (e InvalidLinearMemoryIndexError) Error() string
type InvalidSectionIDError ¶
type InvalidSectionIDError SectionID
func (InvalidSectionIDError) Error ¶
func (e InvalidSectionIDError) Error() string
type InvalidTableIndexError ¶
type InvalidTableIndexError uint32
func (InvalidTableIndexError) Error ¶
func (e InvalidTableIndexError) Error() string
type InvalidTypeConstructorError ¶
func (InvalidTypeConstructorError) Error ¶
func (e InvalidTypeConstructorError) Error() string
type InvalidValueTypeInitExprError ¶
func (InvalidValueTypeInitExprError) Error ¶
func (e InvalidValueTypeInitExprError) Error() string
type KindMismatchError ¶
type KindMismatchError struct { ModuleName string FieldName string Import External Export External }
func (KindMismatchError) Error ¶
func (e KindMismatchError) Error() string
type LocalEntry ¶
type Memory ¶
type Memory struct {
Limits ResizableLimits
}
type MemoryImport ¶
type MemoryImport struct {
Type Memory
}
type MissingSectionError ¶
type MissingSectionError SectionID
func (MissingSectionError) Error ¶
func (e MissingSectionError) Error() string
type Module ¶
type Module struct { Version uint32 Types *SectionTypes Import *SectionImports Function *SectionFunctions Table *SectionTables Memory *SectionMemories Global *SectionGlobals Export *SectionExports Start *SectionStartFunction Elements *SectionElements Code *SectionCode Data *SectionData // The function index space of the module FunctionIndexSpace []Function GlobalIndexSpace []GlobalEntry // function indices into the global function space // the limit of each table is its capacity (cap) TableIndexSpace [][]uint32 LinearMemoryIndexSpace [][]byte Other []Section // Other holds the custom sections if any // contains filtered or unexported fields }
Module represents a parsed WebAssembly module: http://webassembly.org/docs/modules/
func ReadModule ¶
func ReadModule(r io.Reader, resolvePath ResolveFunc) (*Module, error)
ReadModule reads a module from the reader r. resolvePath must take a string and a return a reader to the module pointed to by the string.
func (*Module) ExecInitExpr ¶
ExecInitExpr executes an initializer expression and returns an interface{} value which can either be int32, int64, float32 or float64. It returns an error if the expression is invalid, and nil when the expression yields no value.
func (*Module) GetFunction ¶
GetFunction returns a *Function, based on the function's index in the function index space. Returns nil when the index is invalid
func (*Module) GetGlobal ¶
func (m *Module) GetGlobal(i int) *GlobalEntry
GetGlobal returns a *GlobalEntry, based on the global index space. Returns nil when the index is invalid
type ResizableLimits ¶
type ResizableLimits struct { Flags uint32 // 1 if the Maximum field is valid Initial uint32 // initial length (in units of table elements or wasm pages) Maximum uint32 // If flags is 1, it describes the maximum size of the table or memory }
ResizableLimits describe the limit of a table or linear memory.
type ResolveFunc ¶
ResolveFunc is a function that takes a module name and returns a valid resolved module.
type Section ¶
type Section struct { Start int64 End int64 ID SectionID // Size of this section in bytes PayloadLen uint32 // Section name, empty if id != 0 Name string Bytes []byte }
Section is a declared section in a WASM module.
type SectionCode ¶
type SectionCode struct { Section Bodies []FunctionBody }
SectionCode describes the body for every function declared inside a module.
type SectionData ¶
type SectionData struct { Section Entries []DataSegment }
SectionData describes the initial values of a module's linear memory
type SectionElements ¶
type SectionElements struct { Section Entries []ElementSegment }
SectionElements describes the initial contents of a table's elements.
type SectionExports ¶
type SectionExports struct { Section Entries map[string]ExportEntry }
SectionExports declares the export section of a module
type SectionFunctions ¶
type SectionFunctions struct { Section // Sequences of indices into (FunctionSignatues).Entries Types []uint32 }
SectionFunction declares the signature of all functions defined in the module (in the code section)
type SectionGlobals ¶
type SectionGlobals struct { Section Globals []GlobalEntry }
SectionGlobals defines the value of all global variables declared in a module.
type SectionID ¶
type SectionID uint8
SectionID is a 1-byte code that encodes the section code of both known and custom sections.
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 SectionImports ¶
type SectionImports struct { Section Entries []ImportEntry }
SectionImports declares all imports that will be used in the module.
type SectionMemories ¶
SectionMemories describes all linaer memories used by a module.
type SectionStartFunction ¶
type SectionStartFunction struct { Section Index uint32 // The index of the start function into the global index space. }
SectionStartFunction represents the start function section.
type SectionTables ¶
SectionTables describes all tables declared by a module.
type SectionTypes ¶
type SectionTypes struct { Section Entries []FunctionSig }
SectionTypes declares all function signatures that will be used in a module.
type Table ¶
type Table struct { // The type of elements ElementType ElemType Limits ResizableLimits }
Table describes a table in a Wasm module.
type TableImport ¶
type TableImport struct {
Type Table
}
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
internal
|
|
Package leb128 provides functions for reading integer values encoded in the Little Endian Base 128 (LEB128) format: https://en.wikipedia.org/wiki/LEB128
|
Package leb128 provides functions for reading integer values encoded in the Little Endian Base 128 (LEB128) format: https://en.wikipedia.org/wiki/LEB128 |
Package operators provides all operators used by WebAssembly bytecode, together with their parameter and return type(s).
|
Package operators provides all operators used by WebAssembly bytecode, together with their parameter and return type(s). |