const ( IdValueNaN uint32 = iota IdValueZero IdValueNull IdValueTrue IdValueFalse IdValueGlobal IdJsGo IdObjectConstructor IdArrayConstructor IdJsProcess IdJsfs IdJsfsConstants IdUint8ArrayConstructor IdJsCrypto IdJsDateConstructor IdJsDate NextID )
const ( RefValueUndefined = Ref(0) RefValueNaN = (NanHead|Ref(TypeFlagNone))<<32 | Ref(IdValueNaN) RefValueZero = (NanHead|Ref(TypeFlagNone))<<32 | Ref(IdValueZero) RefValueNull = (NanHead|Ref(TypeFlagNone))<<32 | Ref(IdValueNull) RefValueTrue = (NanHead|Ref(TypeFlagNone))<<32 | Ref(IdValueTrue) RefValueFalse = (NanHead|Ref(TypeFlagNone))<<32 | Ref(IdValueFalse) RefValueGlobal = (NanHead|Ref(TypeFlagObject))<<32 | Ref(IdValueGlobal) RefJsGo = (NanHead|Ref(TypeFlagObject))<<32 | Ref(IdJsGo) RefObjectConstructor = (NanHead|Ref(TypeFlagFunction))<<32 | Ref(IdObjectConstructor) RefArrayConstructor = (NanHead|Ref(TypeFlagFunction))<<32 | Ref(IdArrayConstructor) RefJsProcess = (NanHead|Ref(TypeFlagObject))<<32 | Ref(IdJsProcess) RefJsfs = (NanHead|Ref(TypeFlagObject))<<32 | Ref(IdJsfs) RefJsfsConstants = (NanHead|Ref(TypeFlagObject))<<32 | Ref(IdJsfsConstants) RefUint8ArrayConstructor = (NanHead|Ref(TypeFlagFunction))<<32 | Ref(IdUint8ArrayConstructor) RefJsCrypto = (NanHead|Ref(TypeFlagFunction))<<32 | Ref(IdJsCrypto) RefJsDateConstructor = (NanHead|Ref(TypeFlagFunction))<<32 | Ref(IdJsDateConstructor) RefJsDate = (NanHead|Ref(TypeFlagObject))<<32 | Ref(IdJsDate) )
NanHead are the upper 32 bits of a Ref which are set if the value is not encoded as an IEEE 754 number (see above).
const NanHead = 0x7FF80000
var Undefined = struct{ name string }{/* contains filtered or unexported fields */}
func NewFunc(name string, goFunc Func) *wasm.HostFunc
func NewStack(name string, mem api.Memory, sp uint32) *stack
func ValueToInt32(arg interface{}) int32
func ValueToUint32(arg interface{}) uint32
ByteArray is a result of uint8ArrayConstructor which temporarily stores binary data outside linear memory.
Note: This is a wrapper because a slice is not hashable.
type ByteArray struct {
// contains filtered or unexported fields
}
func WrapByteArray(buf []byte) *ByteArray
func (a *ByteArray) Get(propertyKey string) interface{}
Get implements GetFunction
func (a *ByteArray) Unwrap() []byte
Unwrap returns the underlying byte slice
type Func func(context.Context, api.Module, Stack)
GetFunction allows getting a JavaScript property by name.
type GetFunction interface { Get(propertyKey string) interface{} }
GetLastEventArgs returns the arguments to the last event created by custom.NameSyscallValueCall.
type GetLastEventArgs func(context.Context) []interface{}
Ref is used to identify a JavaScript value, since the value itself cannot be passed to WebAssembly.
The JavaScript value "undefined" is represented by the value 0.
A JavaScript number (64-bit float, except 0 and NaN) is represented by its IEEE 754 binary representation.
All other values are represented as an IEEE 754 binary representation of NaN with bits 0-31 used as an ID and bits 32-34 used to differentiate between string, symbol, function and object.
type Ref uint64
func ValueRef(id uint32, typeFlag TypeFlag) Ref
func (ref Ref) ParseFloat() (v float64, ok bool)
type Stack interface { goarch.Stack ParamRef(i int) Ref ParamRefs(mem api.Memory, i int) []Ref ParamVal(ctx context.Context, i int, loader ValLoader) interface{} // ParamVals is used by functions whose final parameter is an arg array. ParamVals(ctx context.Context, mem api.Memory, i int, loader ValLoader) []interface{} SetResultRef(i int, v Ref) }
type TypeFlag byte
the type flags need to be in sync with gojs.js
const ( TypeFlagNone TypeFlag = iota TypeFlagObject TypeFlagString TypeFlagSymbol //nolint TypeFlagFunction )
type ValLoader func(context.Context, Ref) interface{}