Files
wazero/internal/gojs/custom/names.go
2023-07-05 16:56:18 +08:00

197 lines
6.0 KiB
Go

// Package custom is similar to the WebAssembly Custom Sections. These are
// needed because `GOOS=js GOARCH=wasm` functions aren't defined naturally
// in WebAssembly. For example, every function has a single parameter "sp",
// which implicitly maps to stack parameters in this package.
package custom
const (
// NamePadding is a marker for a parameter which has no purpose, except
// padding. It should not be logged.
NamePadding = "padding"
)
type Names struct {
// Name is the WebAssembly function name.
Name string
// ParamNames are the parameters read in 8-byte strides from the stack
// pointer (SP). This may be nil or include NamePadding.
ParamNames []string
// ResultNames are the results written in 8-byte strides from the stack
// pointer (SP), after ParamNames.
ResultNames []string
}
const (
NameCallback = "callback"
NameDebug = "debug"
)
const (
NameRuntimeWasmExit = "runtime.wasmExit"
NameRuntimeWasmWrite = "runtime.wasmWrite"
NameRuntimeResetMemoryDataView = "runtime.resetMemoryDataView"
NameRuntimeNanotime1 = "runtime.nanotime1"
NameRuntimeWalltime = "runtime.walltime"
NameRuntimeScheduleTimeoutEvent = "runtime.scheduleTimeoutEvent"
NameRuntimeClearTimeoutEvent = "runtime.clearTimeoutEvent"
NameRuntimeGetRandomData = "runtime.getRandomData"
)
const (
NameSyscallFinalizeRef = "syscall/js.finalizeRef"
NameSyscallStringVal = "syscall/js.stringVal"
NameSyscallValueGet = "syscall/js.valueGet"
NameSyscallValueSet = "syscall/js.valueSet"
NameSyscallValueDelete = "syscall/js.valueDelete" // stubbed
NameSyscallValueIndex = "syscall/js.valueIndex"
NameSyscallValueSetIndex = "syscall/js.valueSetIndex" // stubbed
NameSyscallValueCall = "syscall/js.valueCall"
NameSyscallValueInvoke = "syscall/js.valueInvoke" // stubbed
NameSyscallValueNew = "syscall/js.valueNew"
NameSyscallValueLength = "syscall/js.valueLength"
NameSyscallValuePrepareString = "syscall/js.valuePrepareString"
NameSyscallValueLoadString = "syscall/js.valueLoadString"
NameSyscallValueInstanceOf = "syscall/js.valueInstanceOf" // stubbed
NameSyscallCopyBytesToGo = "syscall/js.copyBytesToGo"
NameSyscallCopyBytesToJS = "syscall/js.copyBytesToJS"
)
var NameSection = map[string]*Names{
NameDebug: {
Name: NameDebug,
ParamNames: []string{},
ResultNames: []string{},
},
NameRuntimeWasmExit: {
Name: NameRuntimeWasmExit,
ParamNames: []string{"code"},
ResultNames: []string{},
},
NameRuntimeWasmWrite: {
Name: NameRuntimeWasmWrite,
ParamNames: []string{"fd", "p", "p_len"},
ResultNames: []string{},
},
NameRuntimeResetMemoryDataView: {
Name: NameRuntimeResetMemoryDataView,
ParamNames: []string{},
ResultNames: []string{},
},
NameRuntimeNanotime1: {
Name: NameRuntimeNanotime1,
ParamNames: []string{},
ResultNames: []string{"nsec"},
},
NameRuntimeWalltime: {
Name: NameRuntimeWalltime,
ParamNames: []string{},
ResultNames: []string{"sec", "nsec"},
},
NameRuntimeScheduleTimeoutEvent: {
Name: NameRuntimeScheduleTimeoutEvent,
ParamNames: []string{"ms"},
ResultNames: []string{"id"},
},
NameRuntimeClearTimeoutEvent: {
Name: NameRuntimeClearTimeoutEvent,
ParamNames: []string{"id"},
ResultNames: []string{},
},
NameRuntimeGetRandomData: {
Name: NameRuntimeGetRandomData,
ParamNames: []string{"r", "r_len"},
ResultNames: []string{},
},
NameSyscallFinalizeRef: {
Name: NameSyscallFinalizeRef,
ParamNames: []string{"r"},
ResultNames: []string{},
},
NameSyscallStringVal: {
Name: NameSyscallStringVal,
ParamNames: []string{"x", "x_len"},
ResultNames: []string{"r"},
},
NameSyscallValueGet: {
Name: NameSyscallValueGet,
ParamNames: []string{"v", "p", "p_len"},
ResultNames: []string{"r"},
},
NameSyscallValueSet: {
Name: NameSyscallValueSet,
ParamNames: []string{"v", "p", "p_len", "x"},
ResultNames: []string{},
},
NameSyscallValueDelete: {
Name: NameSyscallValueDelete,
ParamNames: []string{"v", "p", "p_len"},
ResultNames: []string{},
},
NameSyscallValueIndex: {
Name: NameSyscallValueIndex,
ParamNames: []string{"v", "i"},
ResultNames: []string{"r"},
},
NameSyscallValueSetIndex: {
Name: NameSyscallValueSetIndex,
ParamNames: []string{"v", "i", "x"},
ResultNames: []string{},
},
NameSyscallValueCall: {
Name: NameSyscallValueCall,
ParamNames: []string{"v", "m", "m_len", "args", "args_len", NamePadding},
ResultNames: []string{"res", "ok"},
},
NameSyscallValueInvoke: {
Name: NameSyscallValueInvoke,
ParamNames: []string{"v", "args", "args_len", NamePadding},
ResultNames: []string{"res", "ok"},
},
NameSyscallValueNew: {
Name: NameSyscallValueNew,
ParamNames: []string{"v", "args", "args_len", NamePadding},
ResultNames: []string{"res", "ok"},
},
NameSyscallValueLength: {
Name: NameSyscallValueLength,
ParamNames: []string{"v"},
ResultNames: []string{"len"},
},
NameSyscallValuePrepareString: {
Name: NameSyscallValuePrepareString,
ParamNames: []string{"v"},
ResultNames: []string{"str", "length"},
},
NameSyscallValueLoadString: {
Name: NameSyscallValueLoadString,
ParamNames: []string{"v", "b", "b_len"},
ResultNames: []string{},
},
NameSyscallValueInstanceOf: {
Name: NameSyscallValueInstanceOf,
ParamNames: []string{"v", "t"},
ResultNames: []string{"ok"},
},
NameSyscallCopyBytesToGo: {
Name: NameSyscallCopyBytesToGo,
ParamNames: []string{"dst", "dst_len", NamePadding, "src"},
ResultNames: []string{"n", "ok"},
},
NameSyscallCopyBytesToJS: {
Name: NameSyscallCopyBytesToJS,
ParamNames: []string{"dst", "src", "src_len", NamePadding},
ResultNames: []string{"n", "ok"},
},
}
var NameSectionSyscallValueCall = map[string]map[string]*Names{
NameCrypto: CryptoNameSection,
NameDate: DateNameSection,
NameFs: FsNameSection,
NameProcess: ProcessNameSection,
}