mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2024-12-15 03:36:37 +00:00
75 lines
3.5 KiB
Go
75 lines
3.5 KiB
Go
package wasm
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/tetratelabs/wazero/api"
|
|
"github.com/tetratelabs/wazero/experimental"
|
|
)
|
|
|
|
// Engine is a Store-scoped mechanism to compile functions declared or imported by a module.
|
|
// This is a top-level type implemented by an interpreter or compiler.
|
|
type Engine interface {
|
|
// Close closes this engine, and releases all the compiled cache.
|
|
Close() (err error)
|
|
|
|
// CompileModule implements the same method as documented on wasm.Engine.
|
|
CompileModule(ctx context.Context, module *Module, listeners []experimental.FunctionListener, ensureTermination bool) error
|
|
|
|
// CompiledModuleCount is exported for testing, to track the size of the compilation cache.
|
|
CompiledModuleCount() uint32
|
|
|
|
// DeleteCompiledModule releases compilation caches for the given module (source).
|
|
// Note: it is safe to call this function for a module from which module instances are instantiated even when these
|
|
// module instances have outstanding calls.
|
|
DeleteCompiledModule(module *Module)
|
|
|
|
// NewModuleEngine compiles down the function instances in a module, and returns ModuleEngine for the module.
|
|
//
|
|
// * module is the source module from which moduleFunctions are instantiated. This is used for caching.
|
|
// * instance is the *ModuleInstance which is created from `module`.
|
|
//
|
|
// Note: Input parameters must be pre-validated with wasm.Module Validate, to ensure no fields are invalid
|
|
// due to reasons such as out-of-bounds.
|
|
NewModuleEngine(module *Module, instance *ModuleInstance) (ModuleEngine, error)
|
|
}
|
|
|
|
// ModuleEngine implements function calls for a given module.
|
|
type ModuleEngine interface {
|
|
// DoneInstantiation is called at the end of the instantiation of the module.
|
|
DoneInstantiation()
|
|
|
|
// NewFunction returns an api.Function for the given function pointed by the given Index.
|
|
NewFunction(index Index) api.Function
|
|
|
|
// ResolveImportedFunction is used to add imported functions needed to make this ModuleEngine fully functional.
|
|
// - `index` is the function Index of this imported function.
|
|
// - `indexInImportedModule` is the function Index of the imported function in the imported module.
|
|
// - `importedModuleEngine` is the ModuleEngine for the imported ModuleInstance.
|
|
ResolveImportedFunction(index, indexInImportedModule Index, importedModuleEngine ModuleEngine)
|
|
|
|
// ResolveImportedMemory is called when this module imports a memory from another module.
|
|
ResolveImportedMemory(importedModuleEngine ModuleEngine)
|
|
|
|
// LookupFunction returns the FunctionModule and the Index of the function in the returned ModuleInstance at the given offset in the table.
|
|
LookupFunction(t *TableInstance, typeId FunctionTypeID, tableOffset Index) (*ModuleInstance, Index)
|
|
|
|
// GetGlobalValue returns the value of the global variable at the given Index.
|
|
// Only called when OwnsGlobals() returns true, and must not be called for imported globals
|
|
GetGlobalValue(idx Index) (lo, hi uint64)
|
|
|
|
// SetGlobalValue sets the value of the global variable at the given Index.
|
|
// Only called when OwnsGlobals() returns true, and must not be called for imported globals
|
|
SetGlobalValue(idx Index, lo, hi uint64)
|
|
|
|
// OwnsGlobals returns true if this ModuleEngine owns the global variables. If true, wasm.GlobalInstance's Val,ValHi should
|
|
// not be accessed directly.
|
|
OwnsGlobals() bool
|
|
|
|
// FunctionInstanceReference returns Reference for the given Index for a FunctionInstance. The returned values are used by
|
|
// the initialization via ElementSegment.
|
|
FunctionInstanceReference(funcIndex Index) Reference
|
|
|
|
// MemoryGrown notifies the engine that the memory has grown.
|
|
MemoryGrown()
|
|
}
|