summaryrefslogtreecommitdiff
path: root/vendor/github.com/tetratelabs/wazero/api/wasm.go
diff options
context:
space:
mode:
authorLibravatar Terin Stock <terinjokes@gmail.com>2025-03-09 17:47:56 +0100
committerLibravatar Terin Stock <terinjokes@gmail.com>2025-03-10 01:59:49 +0100
commit3ac1ee16f377d31a0fb80c8dae28b6239ac4229e (patch)
treef61faa581feaaeaba2542b9f2b8234a590684413 /vendor/github.com/tetratelabs/wazero/api/wasm.go
parent[chore] update URLs to forked source (diff)
downloadgotosocial-3ac1ee16f377d31a0fb80c8dae28b6239ac4229e.tar.xz
[chore] remove vendor
Diffstat (limited to 'vendor/github.com/tetratelabs/wazero/api/wasm.go')
-rw-r--r--vendor/github.com/tetratelabs/wazero/api/wasm.go766
1 files changed, 0 insertions, 766 deletions
diff --git a/vendor/github.com/tetratelabs/wazero/api/wasm.go b/vendor/github.com/tetratelabs/wazero/api/wasm.go
deleted file mode 100644
index d99c1a756..000000000
--- a/vendor/github.com/tetratelabs/wazero/api/wasm.go
+++ /dev/null
@@ -1,766 +0,0 @@
-// Package api includes constants and interfaces used by both end-users and internal implementations.
-package api
-
-import (
- "context"
- "fmt"
- "math"
-
- "github.com/tetratelabs/wazero/internal/internalapi"
-)
-
-// ExternType classifies imports and exports with their respective types.
-//
-// See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#external-types%E2%91%A0
-type ExternType = byte
-
-const (
- ExternTypeFunc ExternType = 0x00
- ExternTypeTable ExternType = 0x01
- ExternTypeMemory ExternType = 0x02
- ExternTypeGlobal ExternType = 0x03
-)
-
-// The below are exported to consolidate parsing behavior for external types.
-const (
- // ExternTypeFuncName is the name of the WebAssembly 1.0 (20191205) Text Format field for ExternTypeFunc.
- ExternTypeFuncName = "func"
- // ExternTypeTableName is the name of the WebAssembly 1.0 (20191205) Text Format field for ExternTypeTable.
- ExternTypeTableName = "table"
- // ExternTypeMemoryName is the name of the WebAssembly 1.0 (20191205) Text Format field for ExternTypeMemory.
- ExternTypeMemoryName = "memory"
- // ExternTypeGlobalName is the name of the WebAssembly 1.0 (20191205) Text Format field for ExternTypeGlobal.
- ExternTypeGlobalName = "global"
-)
-
-// ExternTypeName returns the name of the WebAssembly 1.0 (20191205) Text Format field of the given type.
-//
-// See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#exports%E2%91%A4
-func ExternTypeName(et ExternType) string {
- switch et {
- case ExternTypeFunc:
- return ExternTypeFuncName
- case ExternTypeTable:
- return ExternTypeTableName
- case ExternTypeMemory:
- return ExternTypeMemoryName
- case ExternTypeGlobal:
- return ExternTypeGlobalName
- }
- return fmt.Sprintf("%#x", et)
-}
-
-// ValueType describes a parameter or result type mapped to a WebAssembly
-// function signature.
-//
-// The following describes how to convert between Wasm and Golang types:
-//
-// - ValueTypeI32 - EncodeU32 DecodeU32 for uint32 / EncodeI32 DecodeI32 for int32
-// - ValueTypeI64 - uint64(int64)
-// - ValueTypeF32 - EncodeF32 DecodeF32 from float32
-// - ValueTypeF64 - EncodeF64 DecodeF64 from float64
-// - ValueTypeExternref - unintptr(unsafe.Pointer(p)) where p is any pointer
-// type in Go (e.g. *string)
-//
-// e.g. Given a Text Format type use (param i64) (result i64), no conversion is
-// necessary.
-//
-// results, _ := fn(ctx, input)
-// result := result[0]
-//
-// e.g. Given a Text Format type use (param f64) (result f64), conversion is
-// necessary.
-//
-// results, _ := fn(ctx, api.EncodeF64(input))
-// result := api.DecodeF64(result[0])
-//
-// Note: This is a type alias as it is easier to encode and decode in the
-// binary format.
-//
-// See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#binary-valtype
-type ValueType = byte
-
-const (
- // ValueTypeI32 is a 32-bit integer.
- ValueTypeI32 ValueType = 0x7f
- // ValueTypeI64 is a 64-bit integer.
- ValueTypeI64 ValueType = 0x7e
- // ValueTypeF32 is a 32-bit floating point number.
- ValueTypeF32 ValueType = 0x7d
- // ValueTypeF64 is a 64-bit floating point number.
- ValueTypeF64 ValueType = 0x7c
-
- // ValueTypeExternref is a externref type.
- //
- // Note: in wazero, externref type value are opaque raw 64-bit pointers,
- // and the ValueTypeExternref type in the signature will be translated as
- // uintptr in wazero's API level.
- //
- // For example, given the import function:
- // (func (import "env" "f") (param externref) (result externref))
- //
- // This can be defined in Go as:
- // r.NewHostModuleBuilder("env").
- // NewFunctionBuilder().
- // WithFunc(func(context.Context, _ uintptr) (_ uintptr) { return }).
- // Export("f")
- //
- // Note: The usage of this type is toggled with api.CoreFeatureBulkMemoryOperations.
- ValueTypeExternref ValueType = 0x6f
-)
-
-// ValueTypeName returns the type name of the given ValueType as a string.
-// These type names match the names used in the WebAssembly text format.
-//
-// Note: This returns "unknown", if an undefined ValueType value is passed.
-func ValueTypeName(t ValueType) string {
- switch t {
- case ValueTypeI32:
- return "i32"
- case ValueTypeI64:
- return "i64"
- case ValueTypeF32:
- return "f32"
- case ValueTypeF64:
- return "f64"
- case ValueTypeExternref:
- return "externref"
- }
- return "unknown"
-}
-
-// Module is a sandboxed, ready to execute Wasm module. This can be used to get exported functions, etc.
-//
-// In WebAssembly terminology, this corresponds to a "Module Instance", but wazero calls pre-instantiation module as
-// "Compiled Module" as in wazero.CompiledModule, therefore we call this post-instantiation module simply "Module".
-// See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#module-instances%E2%91%A0
-//
-// # Notes
-//
-// - This is an interface for decoupling, not third-party implementations.
-// All implementations are in wazero.
-// - Closing the wazero.Runtime closes any Module it instantiated.
-type Module interface {
- fmt.Stringer
-
- // Name is the name this module was instantiated with. Exported functions can be imported with this name.
- Name() string
-
- // Memory returns a memory defined in this module or nil if there are none wasn't.
- Memory() Memory
-
- // ExportedFunction returns a function exported from this module or nil if it wasn't.
- //
- // # Notes
- // - The default wazero.ModuleConfig attempts to invoke `_start`, which
- // in rare cases can close the module. When in doubt, check IsClosed prior
- // to invoking a function export after instantiation.
- // - The semantics of host functions assumes the existence of an "importing module" because, for example, the host function needs access to
- // the memory of the importing module. Therefore, direct use of ExportedFunction is forbidden for host modules.
- // Practically speaking, it is usually meaningless to directly call a host function from Go code as it is already somewhere in Go code.
- ExportedFunction(name string) Function
-
- // ExportedFunctionDefinitions returns all the exported function
- // definitions in this module, keyed on export name.
- ExportedFunctionDefinitions() map[string]FunctionDefinition
-
- // TODO: Table
-
- // ExportedMemory returns a memory exported from this module or nil if it wasn't.
- //
- // WASI modules require exporting a Memory named "memory". This means that a module successfully initialized
- // as a WASI Command or Reactor will never return nil for this name.
- //
- // See https://github.com/WebAssembly/WASI/blob/snapshot-01/design/application-abi.md#current-unstable-abi
- ExportedMemory(name string) Memory
-
- // ExportedMemoryDefinitions returns all the exported memory definitions
- // in this module, keyed on export name.
- //
- // Note: As of WebAssembly Core Specification 2.0, there can be at most one
- // memory.
- ExportedMemoryDefinitions() map[string]MemoryDefinition
-
- // ExportedGlobal a global exported from this module or nil if it wasn't.
- ExportedGlobal(name string) Global
-
- // CloseWithExitCode releases resources allocated for this Module. Use a non-zero exitCode parameter to indicate a
- // failure to ExportedFunction callers.
- //
- // The error returned here, if present, is about resource de-allocation (such as I/O errors). Only the last error is
- // returned, so a non-nil return means at least one error happened. Regardless of error, this Module will
- // be removed, making its name available again.
- //
- // Calling this inside a host function is safe, and may cause ExportedFunction callers to receive a sys.ExitError
- // with the exitCode.
- CloseWithExitCode(ctx context.Context, exitCode uint32) error
-
- // Closer closes this module by delegating to CloseWithExitCode with an exit code of zero.
- Closer
-
- // IsClosed returns true if the module is closed, so no longer usable.
- //
- // This can happen for the following reasons:
- // - Closer was called directly.
- // - A guest function called Closer indirectly, such as `_start` calling
- // `proc_exit`, which internally closed the module.
- // - wazero.RuntimeConfig `WithCloseOnContextDone` was enabled and a
- // context completion closed the module.
- //
- // Where any of the above are possible, check this value before calling an
- // ExportedFunction, even if you didn't formerly receive a sys.ExitError.
- // sys.ExitError is only returned on non-zero code, something that closes
- // the module successfully will not result it one.
- IsClosed() bool
-
- internalapi.WazeroOnly
-}
-
-// Closer closes a resource.
-//
-// # Notes
-//
-// - This is an interface for decoupling, not third-party implementations.
-// All implementations are in wazero.
-type Closer interface {
- // Close closes the resource.
- //
- // Note: The context parameter is used for value lookup, such as for
- // logging. A canceled or otherwise done context will not prevent Close
- // from succeeding.
- Close(context.Context) error
-}
-
-// ExportDefinition is a WebAssembly type exported in a module
-// (wazero.CompiledModule).
-//
-// See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#exports%E2%91%A0
-//
-// # Notes
-//
-// - This is an interface for decoupling, not third-party implementations.
-// All implementations are in wazero.
-type ExportDefinition interface {
- // ModuleName is the possibly empty name of the module defining this
- // export.
- //
- // Note: This may be different from Module.Name, because a compiled module
- // can be instantiated multiple times as different names.
- ModuleName() string
-
- // Index is the position in the module's index, imports first.
- Index() uint32
-
- // Import returns true with the module and name when this was imported.
- // Otherwise, it returns false.
- //
- // Note: Empty string is valid for both names in the WebAssembly Core
- // Specification, so "" "" is possible.
- Import() (moduleName, name string, isImport bool)
-
- // ExportNames include all exported names.
- //
- // Note: The empty name is allowed in the WebAssembly Core Specification,
- // so "" is possible.
- ExportNames() []string
-
- internalapi.WazeroOnly
-}
-
-// MemoryDefinition is a WebAssembly memory exported in a module
-// (wazero.CompiledModule). Units are in pages (64KB).
-//
-// See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#exports%E2%91%A0
-//
-// # Notes
-//
-// - This is an interface for decoupling, not third-party implementations.
-// All implementations are in wazero.
-type MemoryDefinition interface {
- ExportDefinition
-
- // Min returns the possibly zero initial count of 64KB pages.
- Min() uint32
-
- // Max returns the possibly zero max count of 64KB pages, or false if
- // unbounded.
- Max() (uint32, bool)
-
- internalapi.WazeroOnly
-}
-
-// FunctionDefinition is a WebAssembly function exported in a module
-// (wazero.CompiledModule).
-//
-// See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#exports%E2%91%A0
-//
-// # Notes
-//
-// - This is an interface for decoupling, not third-party implementations.
-// All implementations are in wazero.
-type FunctionDefinition interface {
- ExportDefinition
-
- // Name is the module-defined name of the function, which is not necessarily
- // the same as its export name.
- Name() string
-
- // DebugName identifies this function based on its Index or Name in the
- // module. This is used for errors and stack traces. e.g. "env.abort".
- //
- // When the function name is empty, a substitute name is generated by
- // prefixing '$' to its position in the index. Ex ".$0" is the
- // first function (possibly imported) in an unnamed module.
- //
- // The format is dot-delimited module and function name, but there are no
- // restrictions on the module and function name. This means either can be
- // empty or include dots. e.g. "x.x.x" could mean module "x" and name "x.x",
- // or it could mean module "x.x" and name "x".
- //
- // Note: This name is stable regardless of import or export. For example,
- // if Import returns true, the value is still based on the Name or Index
- // and not the imported function name.
- DebugName() string
-
- // GoFunction is non-nil when implemented by the embedder instead of a wasm
- // binary, e.g. via wazero.HostModuleBuilder
- //
- // The expected results are nil, GoFunction or GoModuleFunction.
- GoFunction() interface{}
-
- // ParamTypes are the possibly empty sequence of value types accepted by a
- // function with this signature.
- //
- // See ValueType documentation for encoding rules.
- ParamTypes() []ValueType
-
- // ParamNames are index-correlated with ParamTypes or nil if not available
- // for one or more parameters.
- ParamNames() []string
-
- // ResultTypes are the results of the function.
- //
- // When WebAssembly 1.0 (20191205), there can be at most one result.
- // See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#result-types%E2%91%A0
- //
- // See ValueType documentation for encoding rules.
- ResultTypes() []ValueType
-
- // ResultNames are index-correlated with ResultTypes or nil if not
- // available for one or more results.
- ResultNames() []string
-
- internalapi.WazeroOnly
-}
-
-// Function is a WebAssembly function exported from an instantiated module
-// (wazero.Runtime InstantiateModule).
-//
-// See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#syntax-func
-//
-// # Notes
-//
-// - This is an interface for decoupling, not third-party implementations.
-// All implementations are in wazero.
-type Function interface {
- // Definition is metadata about this function from its defining module.
- Definition() FunctionDefinition
-
- // Call invokes the function with the given parameters and returns any
- // results or an error for any failure looking up or invoking the function.
- //
- // Encoding is described in Definition, and supplying an incorrect count of
- // parameters vs FunctionDefinition.ParamTypes is an error.
- //
- // If the exporting Module was closed during this call, the error returned
- // may be a sys.ExitError. See Module.CloseWithExitCode for details.
- //
- // Call is not goroutine-safe, therefore it is recommended to create
- // another Function if you want to invoke the same function concurrently.
- // On the other hand, sequential invocations of Call is allowed.
- // However, this should not be called multiple times until the previous Call returns.
- //
- // To safely encode/decode params/results expressed as uint64, users are encouraged to
- // use api.EncodeXXX or DecodeXXX functions. See the docs on api.ValueType.
- //
- // When RuntimeConfig.WithCloseOnContextDone is toggled, the invocation of this Call method is ensured to be closed
- // whenever one of the three conditions is met. In the event of close, sys.ExitError will be returned and
- // the api.Module from which this api.Function is derived will be made closed. See the documentation of
- // WithCloseOnContextDone on wazero.RuntimeConfig for detail. See examples in context_done_example_test.go for
- // the end-to-end demonstrations of how these terminations can be performed.
- Call(ctx context.Context, params ...uint64) ([]uint64, error)
-
- // CallWithStack is an optimized variation of Call that saves memory
- // allocations when the stack slice is reused across calls.
- //
- // Stack length must be at least the max of parameter or result length.
- // The caller adds parameters in order to the stack, and reads any results
- // in order from the stack, except in the error case.
- //
- // For example, the following reuses the same stack slice to call searchFn
- // repeatedly saving one allocation per iteration:
- //
- // stack := make([]uint64, 4)
- // for i, search := range searchParams {
- // // copy the next params to the stack
- // copy(stack, search)
- // if err := searchFn.CallWithStack(ctx, stack); err != nil {
- // return err
- // } else if stack[0] == 1 { // found
- // return i // searchParams[i] matched!
- // }
- // }
- //
- // # Notes
- //
- // - This is similar to GoModuleFunction, except for using calling functions
- // instead of implementing them. Moreover, this is used regardless of
- // whether the callee is a host or wasm defined function.
- CallWithStack(ctx context.Context, stack []uint64) error
-
- internalapi.WazeroOnly
-}
-
-// GoModuleFunction is a Function implemented in Go instead of a wasm binary.
-// The Module parameter is the calling module, used to access memory or
-// exported functions. See GoModuleFunc for an example.
-//
-// The stack is includes any parameters encoded according to their ValueType.
-// Its length is the max of parameter or result length. When there are results,
-// write them in order beginning at index zero. Do not use the stack after the
-// function returns.
-//
-// Here's a typical way to read three parameters and write back one.
-//
-// // read parameters off the stack in index order
-// argv, argvBuf := api.DecodeU32(stack[0]), api.DecodeU32(stack[1])
-//
-// // write results back to the stack in index order
-// stack[0] = api.EncodeU32(ErrnoSuccess)
-//
-// This function can be non-deterministic or cause side effects. It also
-// has special properties not defined in the WebAssembly Core specification.
-// Notably, this uses the caller's memory (via Module.Memory). See
-// https://www.w3.org/TR/wasm-core-1/#host-functions%E2%91%A0
-//
-// Most end users will not define functions directly with this, as they will
-// use reflection or code generators instead. These approaches are more
-// idiomatic as they can map go types to ValueType. This type is exposed for
-// those willing to trade usability and safety for performance.
-//
-// To safely decode/encode values from/to the uint64 stack, users are encouraged to use
-// api.EncodeXXX or api.DecodeXXX functions. See the docs on api.ValueType.
-type GoModuleFunction interface {
- Call(ctx context.Context, mod Module, stack []uint64)
-}
-
-// GoModuleFunc is a convenience for defining an inlined function.
-//
-// For example, the following returns an uint32 value read from parameter zero:
-//
-// api.GoModuleFunc(func(ctx context.Context, mod api.Module, stack []uint64) {
-// offset := api.DecodeU32(stack[0]) // read the parameter from the stack
-//
-// ret, ok := mod.Memory().ReadUint32Le(offset)
-// if !ok {
-// panic("out of memory")
-// }
-//
-// stack[0] = api.EncodeU32(ret) // add the result back to the stack.
-// })
-type GoModuleFunc func(ctx context.Context, mod Module, stack []uint64)
-
-// Call implements GoModuleFunction.Call.
-func (f GoModuleFunc) Call(ctx context.Context, mod Module, stack []uint64) {
- f(ctx, mod, stack)
-}
-
-// GoFunction is an optimized form of GoModuleFunction which doesn't require
-// the Module parameter. See GoFunc for an example.
-//
-// For example, this function does not need to use the importing module's
-// memory or exported functions.
-type GoFunction interface {
- Call(ctx context.Context, stack []uint64)
-}
-
-// GoFunc is a convenience for defining an inlined function.
-//
-// For example, the following returns the sum of two uint32 parameters:
-//
-// api.GoFunc(func(ctx context.Context, stack []uint64) {
-// x, y := api.DecodeU32(stack[0]), api.DecodeU32(stack[1])
-// stack[0] = api.EncodeU32(x + y)
-// })
-type GoFunc func(ctx context.Context, stack []uint64)
-
-// Call implements GoFunction.Call.
-func (f GoFunc) Call(ctx context.Context, stack []uint64) {
- f(ctx, stack)
-}
-
-// Global is a WebAssembly 1.0 (20191205) global exported from an instantiated module (wazero.Runtime InstantiateModule).
-//
-// For example, if the value is not mutable, you can read it once:
-//
-// offset := module.ExportedGlobal("memory.offset").Get()
-//
-// Globals are allowed by specification to be mutable. However, this can be disabled by configuration. When in doubt,
-// safe cast to find out if the value can change. Here's an example:
-//
-// offset := module.ExportedGlobal("memory.offset")
-// if _, ok := offset.(api.MutableGlobal); ok {
-// // value can change
-// } else {
-// // value is constant
-// }
-//
-// See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#globals%E2%91%A0
-//
-// # Notes
-//
-// - This is an interface for decoupling, not third-party implementations.
-// All implementations are in wazero.
-type Global interface {
- fmt.Stringer
-
- // Type describes the numeric type of the global.
- Type() ValueType
-
- // Get returns the last known value of this global.
- //
- // See Type for how to decode this value to a Go type.
- Get() uint64
-}
-
-// MutableGlobal is a Global whose value can be updated at runtime (variable).
-//
-// # Notes
-//
-// - This is an interface for decoupling, not third-party implementations.
-// All implementations are in wazero.
-type MutableGlobal interface {
- Global
-
- // Set updates the value of this global.
- //
- // See Global.Type for how to encode this value from a Go type.
- Set(v uint64)
-
- internalapi.WazeroOnly
-}
-
-// Memory allows restricted access to a module's memory. Notably, this does not allow growing.
-//
-// See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#storage%E2%91%A0
-//
-// # Notes
-//
-// - This is an interface for decoupling, not third-party implementations.
-// All implementations are in wazero.
-// - This includes all value types available in WebAssembly 1.0 (20191205) and all are encoded little-endian.
-type Memory interface {
- // Definition is metadata about this memory from its defining module.
- Definition() MemoryDefinition
-
- // Size returns the memory size in bytes available.
- // e.g. If the underlying memory has 1 page: 65536
- //
- // # Notes
- //
- // - This overflows (returns zero) if the memory has the maximum 65536 pages.
- // As a workaround until wazero v2 to fix the return type, use Grow(0) to obtain the current pages and
- // multiply by 65536.
- //
- // See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#-hrefsyntax-instr-memorymathsfmemorysize%E2%91%A0
- Size() uint32
-
- // Grow increases memory by the delta in pages (65536 bytes per page).
- // The return val is the previous memory size in pages, or false if the
- // delta was ignored as it exceeds MemoryDefinition.Max.
- //
- // # Notes
- //
- // - This is the same as the "memory.grow" instruction defined in the
- // WebAssembly Core Specification, except returns false instead of -1.
- // - When this returns true, any shared views via Read must be refreshed.
- //
- // See MemorySizer Read and https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#grow-mem
- Grow(deltaPages uint32) (previousPages uint32, ok bool)
-
- // ReadByte reads a single byte from the underlying buffer at the offset or returns false if out of range.
- ReadByte(offset uint32) (byte, bool)
-
- // ReadUint16Le reads a uint16 in little-endian encoding from the underlying buffer at the offset in or returns
- // false if out of range.
- ReadUint16Le(offset uint32) (uint16, bool)
-
- // ReadUint32Le reads a uint32 in little-endian encoding from the underlying buffer at the offset in or returns
- // false if out of range.
- ReadUint32Le(offset uint32) (uint32, bool)
-
- // ReadFloat32Le reads a float32 from 32 IEEE 754 little-endian encoded bits in the underlying buffer at the offset
- // or returns false if out of range.
- // See math.Float32bits
- ReadFloat32Le(offset uint32) (float32, bool)
-
- // ReadUint64Le reads a uint64 in little-endian encoding from the underlying buffer at the offset or returns false
- // if out of range.
- ReadUint64Le(offset uint32) (uint64, bool)
-
- // ReadFloat64Le reads a float64 from 64 IEEE 754 little-endian encoded bits in the underlying buffer at the offset
- // or returns false if out of range.
- //
- // See math.Float64bits
- ReadFloat64Le(offset uint32) (float64, bool)
-
- // Read reads byteCount bytes from the underlying buffer at the offset or
- // returns false if out of range.
- //
- // For example, to search for a NUL-terminated string:
- // buf, _ = memory.Read(offset, byteCount)
- // n := bytes.IndexByte(buf, 0)
- // if n < 0 {
- // // Not found!
- // }
- //
- // Write-through
- //
- // This returns a view of the underlying memory, not a copy. This means any
- // writes to the slice returned are visible to Wasm, and any updates from
- // Wasm are visible reading the returned slice.
- //
- // For example:
- // buf, _ = memory.Read(offset, byteCount)
- // buf[1] = 'a' // writes through to memory, meaning Wasm code see 'a'.
- //
- // If you don't intend-write through, make a copy of the returned slice.
- //
- // When to refresh Read
- //
- // The returned slice disconnects on any capacity change. For example,
- // `buf = append(buf, 'a')` might result in a slice that is no longer
- // shared. The same exists Wasm side. For example, if Wasm changes its
- // memory capacity, ex via "memory.grow"), the host slice is no longer
- // shared. Those who need a stable view must set Wasm memory min=max, or
- // use wazero.RuntimeConfig WithMemoryCapacityPages to ensure max is always
- // allocated.
- Read(offset, byteCount uint32) ([]byte, bool)
-
- // WriteByte writes a single byte to the underlying buffer at the offset in or returns false if out of range.
- WriteByte(offset uint32, v byte) bool
-
- // WriteUint16Le writes the value in little-endian encoding to the underlying buffer at the offset in or returns
- // false if out of range.
- WriteUint16Le(offset uint32, v uint16) bool
-
- // WriteUint32Le writes the value in little-endian encoding to the underlying buffer at the offset in or returns
- // false if out of range.
- WriteUint32Le(offset, v uint32) bool
-
- // WriteFloat32Le writes the value in 32 IEEE 754 little-endian encoded bits to the underlying buffer at the offset
- // or returns false if out of range.
- //
- // See math.Float32bits
- WriteFloat32Le(offset uint32, v float32) bool
-
- // WriteUint64Le writes the value in little-endian encoding to the underlying buffer at the offset in or returns
- // false if out of range.
- WriteUint64Le(offset uint32, v uint64) bool
-
- // WriteFloat64Le writes the value in 64 IEEE 754 little-endian encoded bits to the underlying buffer at the offset
- // or returns false if out of range.
- //
- // See math.Float64bits
- WriteFloat64Le(offset uint32, v float64) bool
-
- // Write writes the slice to the underlying buffer at the offset or returns false if out of range.
- Write(offset uint32, v []byte) bool
-
- // WriteString writes the string to the underlying buffer at the offset or returns false if out of range.
- WriteString(offset uint32, v string) bool
-
- internalapi.WazeroOnly
-}
-
-// CustomSection contains the name and raw data of a custom section.
-//
-// # Notes
-//
-// - This is an interface for decoupling, not third-party implementations.
-// All implementations are in wazero.
-type CustomSection interface {
- // Name is the name of the custom section
- Name() string
- // Data is the raw data of the custom section
- Data() []byte
-
- internalapi.WazeroOnly
-}
-
-// EncodeExternref encodes the input as a ValueTypeExternref.
-//
-// See DecodeExternref
-func EncodeExternref(input uintptr) uint64 {
- return uint64(input)
-}
-
-// DecodeExternref decodes the input as a ValueTypeExternref.
-//
-// See EncodeExternref
-func DecodeExternref(input uint64) uintptr {
- return uintptr(input)
-}
-
-// EncodeI32 encodes the input as a ValueTypeI32.
-func EncodeI32(input int32) uint64 {
- return uint64(uint32(input))
-}
-
-// DecodeI32 decodes the input as a ValueTypeI32.
-func DecodeI32(input uint64) int32 {
- return int32(input)
-}
-
-// EncodeU32 encodes the input as a ValueTypeI32.
-func EncodeU32(input uint32) uint64 {
- return uint64(input)
-}
-
-// DecodeU32 decodes the input as a ValueTypeI32.
-func DecodeU32(input uint64) uint32 {
- return uint32(input)
-}
-
-// EncodeI64 encodes the input as a ValueTypeI64.
-func EncodeI64(input int64) uint64 {
- return uint64(input)
-}
-
-// EncodeF32 encodes the input as a ValueTypeF32.
-//
-// See DecodeF32
-func EncodeF32(input float32) uint64 {
- return uint64(math.Float32bits(input))
-}
-
-// DecodeF32 decodes the input as a ValueTypeF32.
-//
-// See EncodeF32
-func DecodeF32(input uint64) float32 {
- return math.Float32frombits(uint32(input))
-}
-
-// EncodeF64 encodes the input as a ValueTypeF64.
-//
-// See EncodeF32
-func EncodeF64(input float64) uint64 {
- return math.Float64bits(input)
-}
-
-// DecodeF64 decodes the input as a ValueTypeF64.
-//
-// See EncodeF64
-func DecodeF64(input uint64) float64 {
- return math.Float64frombits(input)
-}