pub enum Trampoline {
Show 54 variants
LowerImport {
index: LoweredIndex,
lower_ty: TypeFuncIndex,
options: OptionsIndex,
},
Transcoder {
op: Transcode,
from: RuntimeMemoryIndex,
from64: bool,
to: RuntimeMemoryIndex,
to64: bool,
},
AlwaysTrap,
ResourceNew {
instance: RuntimeComponentInstanceIndex,
ty: TypeResourceTableIndex,
},
ResourceRep {
instance: RuntimeComponentInstanceIndex,
ty: TypeResourceTableIndex,
},
ResourceDrop {
instance: RuntimeComponentInstanceIndex,
ty: TypeResourceTableIndex,
},
BackpressureSet {
instance: RuntimeComponentInstanceIndex,
},
BackpressureInc {
instance: RuntimeComponentInstanceIndex,
},
BackpressureDec {
instance: RuntimeComponentInstanceIndex,
},
TaskReturn {
instance: RuntimeComponentInstanceIndex,
results: TypeTupleIndex,
options: OptionsIndex,
},
TaskCancel {
instance: RuntimeComponentInstanceIndex,
},
WaitableSetNew {
instance: RuntimeComponentInstanceIndex,
},
WaitableSetWait {
instance: RuntimeComponentInstanceIndex,
options: OptionsIndex,
},
WaitableSetPoll {
instance: RuntimeComponentInstanceIndex,
options: OptionsIndex,
},
WaitableSetDrop {
instance: RuntimeComponentInstanceIndex,
},
WaitableJoin {
instance: RuntimeComponentInstanceIndex,
},
ThreadYield {
instance: RuntimeComponentInstanceIndex,
cancellable: bool,
},
SubtaskDrop {
instance: RuntimeComponentInstanceIndex,
},
SubtaskCancel {
instance: RuntimeComponentInstanceIndex,
async_: bool,
},
StreamNew {
instance: RuntimeComponentInstanceIndex,
ty: TypeStreamTableIndex,
},
StreamRead {
instance: RuntimeComponentInstanceIndex,
ty: TypeStreamTableIndex,
options: OptionsIndex,
},
StreamWrite {
instance: RuntimeComponentInstanceIndex,
ty: TypeStreamTableIndex,
options: OptionsIndex,
},
StreamCancelRead {
instance: RuntimeComponentInstanceIndex,
ty: TypeStreamTableIndex,
async_: bool,
},
StreamCancelWrite {
instance: RuntimeComponentInstanceIndex,
ty: TypeStreamTableIndex,
async_: bool,
},
StreamDropReadable {
instance: RuntimeComponentInstanceIndex,
ty: TypeStreamTableIndex,
},
StreamDropWritable {
instance: RuntimeComponentInstanceIndex,
ty: TypeStreamTableIndex,
},
FutureNew {
instance: RuntimeComponentInstanceIndex,
ty: TypeFutureTableIndex,
},
FutureRead {
instance: RuntimeComponentInstanceIndex,
ty: TypeFutureTableIndex,
options: OptionsIndex,
},
FutureWrite {
instance: RuntimeComponentInstanceIndex,
ty: TypeFutureTableIndex,
options: OptionsIndex,
},
FutureCancelRead {
instance: RuntimeComponentInstanceIndex,
ty: TypeFutureTableIndex,
async_: bool,
},
FutureCancelWrite {
instance: RuntimeComponentInstanceIndex,
ty: TypeFutureTableIndex,
async_: bool,
},
FutureDropReadable {
instance: RuntimeComponentInstanceIndex,
ty: TypeFutureTableIndex,
},
FutureDropWritable {
instance: RuntimeComponentInstanceIndex,
ty: TypeFutureTableIndex,
},
ErrorContextNew {
instance: RuntimeComponentInstanceIndex,
ty: TypeComponentLocalErrorContextTableIndex,
options: OptionsIndex,
},
ErrorContextDebugMessage {
instance: RuntimeComponentInstanceIndex,
ty: TypeComponentLocalErrorContextTableIndex,
options: OptionsIndex,
},
ErrorContextDrop {
instance: RuntimeComponentInstanceIndex,
ty: TypeComponentLocalErrorContextTableIndex,
},
ResourceTransferOwn,
ResourceTransferBorrow,
ResourceEnterCall,
ResourceExitCall,
PrepareCall {
memory: Option<RuntimeMemoryIndex>,
},
SyncStartCall {
callback: Option<RuntimeCallbackIndex>,
},
AsyncStartCall {
callback: Option<RuntimeCallbackIndex>,
post_return: Option<RuntimePostReturnIndex>,
},
FutureTransfer,
StreamTransfer,
ErrorContextTransfer,
ContextGet {
instance: RuntimeComponentInstanceIndex,
slot: u32,
},
ContextSet {
instance: RuntimeComponentInstanceIndex,
slot: u32,
},
ThreadIndex,
ThreadNewIndirect {
instance: RuntimeComponentInstanceIndex,
start_func_ty_idx: ComponentTypeIndex,
start_func_table_idx: RuntimeTableIndex,
},
ThreadSwitchTo {
instance: RuntimeComponentInstanceIndex,
cancellable: bool,
},
ThreadSuspend {
instance: RuntimeComponentInstanceIndex,
cancellable: bool,
},
ThreadResumeLater {
instance: RuntimeComponentInstanceIndex,
},
ThreadYieldTo {
instance: RuntimeComponentInstanceIndex,
cancellable: bool,
},
}Expand description
A list of all possible trampolines that may be required to compile a component completely.
These trampolines are used often as core wasm definitions and require Cranelift support to generate these functions. Each trampoline serves a different purpose for implementing bits and pieces of the component model.
All trampolines have a core wasm function signature associated with them
which is stored in the Component::trampolines array.
Note that this type does not implement Serialize or Deserialize and
that’s intentional as this isn’t stored in the final compilation artifact.
Variants§
LowerImport
Description of a lowered import used in conjunction with
GlobalInitializer::LowerImport.
Fields
index: LoweredIndexThe runtime lowering state that this trampoline will access.
lower_ty: TypeFuncIndexThe type of the function that is being lowered, as perceived by the component doing the lowering.
options: OptionsIndexThe canonical ABI options used when lowering this function specified in the original component.
Transcoder
Information about a string transcoding function required by an adapter module.
A transcoder is used when strings are passed between adapter modules, optionally changing string encodings at the same time. The transcoder is implemented in a few different layers:
- Each generated adapter module has some glue around invoking the
transcoder represented by this item. This involves bounds-checks and
handling
reallocfor example. - Each transcoder gets a cranelift-generated trampoline which has the appropriate signature for the adapter module in question. Existence of this initializer indicates that this should be compiled by Cranelift.
- The cranelift-generated trampoline will invoke a “transcoder libcall” which is implemented natively in Rust that has a signature independent of memory64 configuration options for example.
Fields
from: RuntimeMemoryIndexThe linear memory that the string is being read from.
to: RuntimeMemoryIndexThe linear memory that the string is being written to.
AlwaysTrap
A small adapter which simply traps, used for degenerate lift/lower combinations.
ResourceNew
A resource.new intrinsic which will inject a new resource into the
table specified.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
ty: TypeResourceTableIndexThe type of the resource.
ResourceRep
Same as ResourceNew, but for the resource.rep intrinsic.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
ty: TypeResourceTableIndexThe type of the resource.
ResourceDrop
Same as ResourceNew, but for the resource.drop intrinsic.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
ty: TypeResourceTableIndexThe type of the resource.
BackpressureSet
A backpressure.set intrinsic, which tells the host to enable or
disable backpressure for the caller’s instance.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
BackpressureInc
A backpressure.inc intrinsic.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
BackpressureDec
A backpressure.dec intrinsic.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
TaskReturn
A task.return intrinsic, which returns a result to the caller of a
lifted export function. This allows the callee to continue executing
after returning a result.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
results: TypeTupleIndexTuple representing the result types this intrinsic accepts.
options: OptionsIndexThe canonical ABI options specified for this intrinsic.
TaskCancel
A task.cancel intrinsic, which acknowledges a CANCELLED event
delivered to a guest task previously created by a call to an async
export.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
WaitableSetNew
A waitable-set.new intrinsic.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
WaitableSetWait
A waitable-set.wait intrinsic, which waits for at least one
outstanding async task/stream/future to make progress, returning the
first such event.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
options: OptionsIndexConfiguration options for this intrinsic call.
WaitableSetPoll
A waitable-set.poll intrinsic, which checks whether any outstanding
async task/stream/future has made progress. Unlike task.wait, this
does not block and may return nothing if no such event has occurred.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
options: OptionsIndexConfiguration options for this intrinsic call.
WaitableSetDrop
A waitable-set.drop intrinsic.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
WaitableJoin
A waitable.join intrinsic.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
ThreadYield
A thread.yield intrinsic, which yields control to the host so that other
tasks are able to make progress, if any.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
SubtaskDrop
A subtask.drop intrinsic to drop a specified task which has completed.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
SubtaskCancel
A subtask.cancel intrinsic to drop an in-progress task.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
StreamNew
A stream.new intrinsic to create a new stream handle of the
specified type.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
ty: TypeStreamTableIndexThe table index for the specific stream type and caller instance.
StreamRead
A stream.read intrinsic to read from a stream of the specified type.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
ty: TypeStreamTableIndexThe table index for the specific stream type and caller instance.
options: OptionsIndexAny options (e.g. string encoding) to use when storing values to memory.
StreamWrite
A stream.write intrinsic to write to a stream of the specified type.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
ty: TypeStreamTableIndexThe table index for the specific stream type and caller instance.
options: OptionsIndexAny options (e.g. string encoding) to use when storing values to memory.
StreamCancelRead
A stream.cancel-read intrinsic to cancel an in-progress read from a
stream of the specified type.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
ty: TypeStreamTableIndexThe table index for the specific stream type and caller instance.
StreamCancelWrite
A stream.cancel-write intrinsic to cancel an in-progress write from a
stream of the specified type.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
ty: TypeStreamTableIndexThe table index for the specific stream type and caller instance.
StreamDropReadable
A stream.drop-readable intrinsic to drop the readable end of a
stream of the specified type.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
ty: TypeStreamTableIndexThe table index for the specific stream type and caller instance.
StreamDropWritable
A stream.drop-writable intrinsic to drop the writable end of a
stream of the specified type.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
ty: TypeStreamTableIndexThe table index for the specific stream type and caller instance.
FutureNew
A future.new intrinsic to create a new future handle of the
specified type.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
ty: TypeFutureTableIndexThe table index for the specific future type and caller instance.
FutureRead
A future.read intrinsic to read from a future of the specified type.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
ty: TypeFutureTableIndexThe table index for the specific future type and caller instance.
options: OptionsIndexAny options (e.g. string encoding) to use when storing values to memory.
FutureWrite
A future.write intrinsic to write to a future of the specified type.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
ty: TypeFutureTableIndexThe table index for the specific future type and caller instance.
options: OptionsIndexAny options (e.g. string encoding) to use when storing values to memory.
FutureCancelRead
A future.cancel-read intrinsic to cancel an in-progress read from a
future of the specified type.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
ty: TypeFutureTableIndexThe table index for the specific future type and caller instance.
FutureCancelWrite
A future.cancel-write intrinsic to cancel an in-progress write from a
future of the specified type.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
ty: TypeFutureTableIndexThe table index for the specific future type and caller instance.
FutureDropReadable
A future.drop-readable intrinsic to drop the readable end of a
future of the specified type.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
ty: TypeFutureTableIndexThe table index for the specific future type and caller instance.
FutureDropWritable
A future.drop-writable intrinsic to drop the writable end of a
future of the specified type.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
ty: TypeFutureTableIndexThe table index for the specific future type and caller instance.
ErrorContextNew
A error-context.new intrinsic to create a new error-context with a
specified debug message.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
ty: TypeComponentLocalErrorContextTableIndexThe table index for the error-context type in the caller instance.
options: OptionsIndexString encoding, memory, etc. to use when loading debug message.
ErrorContextDebugMessage
A error-context.debug-message intrinsic to get the debug message for a
specified error-context.
Note that the debug message might not necessarily match what was passed
to error.new.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
ty: TypeComponentLocalErrorContextTableIndexThe table index for the error-context type in the caller instance.
options: OptionsIndexString encoding, memory, etc. to use when storing debug message.
ErrorContextDrop
A error-context.drop intrinsic to drop a specified error-context.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
ty: TypeComponentLocalErrorContextTableIndexThe table index for the error-context type in the caller instance.
ResourceTransferOwn
An intrinsic used by FACT-generated modules which will transfer an owned resource from one table to another. Used in component-to-component adapter trampolines.
ResourceTransferBorrow
Same as ResourceTransferOwn but for borrows.
ResourceEnterCall
An intrinsic used by FACT-generated modules which indicates that a call is being entered and resource-related metadata needs to be configured.
Note that this is currently only invoked when borrowed resources are detected, otherwise this is “optimized out”.
ResourceExitCall
Same as ResourceEnterCall except for when exiting a call.
PrepareCall
An intrinsic used by FACT-generated modules to prepare a call involving an async-lowered import and/or an async-lifted export.
Fields
memory: Option<RuntimeMemoryIndex>The memory used to verify that the memory specified for the
task.return that is called at runtime matches the one specified in
the lifted export.
SyncStartCall
An intrinsic used by FACT-generated modules to start a call involving a sync-lowered import and async-lifted export.
Fields
callback: Option<RuntimeCallbackIndex>The callee’s callback function, if any.
AsyncStartCall
An intrinsic used by FACT-generated modules to start a call involving an async-lowered import function.
Note that AsyncPrepareCall and AsyncStartCall could theoretically be
combined into a single AsyncCall intrinsic, but we separate them to
allow the FACT-generated module to optionally call the callee directly
without an intermediate host stack frame.
Fields
callback: Option<RuntimeCallbackIndex>The callee’s callback, if any.
post_return: Option<RuntimePostReturnIndex>The callee’s post-return function, if any.
FutureTransfer
An intrinisic used by FACT-generated modules to (partially or entirely) transfer
ownership of a future.
Transferring a future can either mean giving away the readable end
while retaining the writable end or only the former, depending on the
ownership status of the future.
StreamTransfer
An intrinisic used by FACT-generated modules to (partially or entirely) transfer
ownership of a stream.
Transferring a stream can either mean giving away the readable end
while retaining the writable end or only the former, depending on the
ownership status of the stream.
ErrorContextTransfer
An intrinisic used by FACT-generated modules to (partially or entirely) transfer
ownership of an error-context.
Unlike futures, streams, and resource handles, error-context handles
are reference counted, meaning that sharing the handle with another
component does not invalidate the handle in the original component.
ContextGet
Intrinsic used to implement the context.get component model builtin.
The payload here represents that this is accessing the Nth slot of local storage.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
ContextSet
Intrinsic used to implement the context.set component model builtin.
The payload here represents that this is accessing the Nth slot of local storage.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
ThreadIndex
Intrinsic used to implement the thread.index component model builtin.
ThreadNewIndirect
Intrinsic used to implement the thread.new_indirect component model builtin.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
start_func_ty_idx: ComponentTypeIndexThe type index for the start function of the thread.
start_func_table_idx: RuntimeTableIndexThe index of the table that stores the start function.
ThreadSwitchTo
Intrinsic used to implement the thread.switch-to component model builtin.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
ThreadSuspend
Intrinsic used to implement the thread.suspend component model builtin.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
ThreadResumeLater
Intrinsic used to implement the thread.resume-later component model builtin.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
ThreadYieldTo
Intrinsic used to implement the thread.yield-to component model builtin.
Fields
instance: RuntimeComponentInstanceIndexThe specific component instance which is calling the intrinsic.
Implementations§
Source§impl Trampoline
impl Trampoline
Sourcepub fn symbol_name(&self) -> String
pub fn symbol_name(&self) -> String
Returns the name to use for the symbol of this trampoline in the final compiled artifact