Enum Trampoline

Source
pub enum Trampoline {
Show 46 variants LowerImport { index: LoweredIndex, lower_ty: TypeFuncIndex, options: CanonicalOptions, }, Transcoder { op: Transcode, from: RuntimeMemoryIndex, from64: bool, to: RuntimeMemoryIndex, to64: bool, }, AlwaysTrap, ResourceNew(TypeResourceTableIndex), ResourceRep(TypeResourceTableIndex), ResourceDrop(TypeResourceTableIndex), BackpressureSet { instance: RuntimeComponentInstanceIndex, }, TaskReturn { results: TypeTupleIndex, options: CanonicalOptions, }, TaskCancel { instance: RuntimeComponentInstanceIndex, }, WaitableSetNew { instance: RuntimeComponentInstanceIndex, }, WaitableSetWait { instance: RuntimeComponentInstanceIndex, async_: bool, memory: RuntimeMemoryIndex, }, WaitableSetPoll { instance: RuntimeComponentInstanceIndex, async_: bool, memory: RuntimeMemoryIndex, }, WaitableSetDrop { instance: RuntimeComponentInstanceIndex, }, WaitableJoin { instance: RuntimeComponentInstanceIndex, }, Yield { async_: bool, }, SubtaskDrop { instance: RuntimeComponentInstanceIndex, }, SubtaskCancel { instance: RuntimeComponentInstanceIndex, async_: bool, }, StreamNew { ty: TypeStreamTableIndex, }, StreamRead { ty: TypeStreamTableIndex, options: CanonicalOptions, }, StreamWrite { ty: TypeStreamTableIndex, options: CanonicalOptions, }, StreamCancelRead { ty: TypeStreamTableIndex, async_: bool, }, StreamCancelWrite { ty: TypeStreamTableIndex, async_: bool, }, StreamCloseReadable { ty: TypeStreamTableIndex, }, StreamCloseWritable { ty: TypeStreamTableIndex, }, FutureNew { ty: TypeFutureTableIndex, }, FutureRead { ty: TypeFutureTableIndex, options: CanonicalOptions, }, FutureWrite { ty: TypeFutureTableIndex, options: CanonicalOptions, }, FutureCancelRead { ty: TypeFutureTableIndex, async_: bool, }, FutureCancelWrite { ty: TypeFutureTableIndex, async_: bool, }, FutureCloseReadable { ty: TypeFutureTableIndex, }, FutureCloseWritable { ty: TypeFutureTableIndex, }, ErrorContextNew { ty: TypeComponentLocalErrorContextTableIndex, options: CanonicalOptions, }, ErrorContextDebugMessage { ty: TypeComponentLocalErrorContextTableIndex, options: CanonicalOptions, }, ErrorContextDrop { 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(u32), ContextSet(u32),
}
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: LoweredIndex

The runtime lowering state that this trampoline will access.

§lower_ty: TypeFuncIndex

The type of the function that is being lowered, as perceived by the component doing the lowering.

§options: CanonicalOptions

The 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 realloc for 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

§op: Transcode

The transcoding operation being performed.

§from: RuntimeMemoryIndex

The linear memory that the string is being read from.

§from64: bool

Whether or not the source linear memory is 64-bit or not.

§to: RuntimeMemoryIndex

The linear memory that the string is being written to.

§to64: bool

Whether or not the destination linear memory is 64-bit or not.

§

AlwaysTrap

A small adapter which simply traps, used for degenerate lift/lower combinations.

§

ResourceNew(TypeResourceTableIndex)

A resource.new intrinsic which will inject a new resource into the table specified.

§

ResourceRep(TypeResourceTableIndex)

Same as ResourceNew, but for the resource.rep intrinsic.

§

ResourceDrop(TypeResourceTableIndex)

Same as ResourceNew, but for the resource.drop intrinsic.

§

BackpressureSet

A backpressure.set intrinsic, which tells the host to enable or disable backpressure for the caller’s instance.

Fields

§instance: RuntimeComponentInstanceIndex

The 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

§results: TypeTupleIndex

Tuple representing the result types this intrinsic accepts.

§options: CanonicalOptions

The 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: RuntimeComponentInstanceIndex

The specific component instance which is calling the intrinsic.

§

WaitableSetNew

A waitable-set.new intrinsic.

Fields

§instance: RuntimeComponentInstanceIndex

The 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: RuntimeComponentInstanceIndex

The specific component instance which is calling the intrinsic.

§async_: bool

If true, indicates the caller instance maybe reentered.

§memory: RuntimeMemoryIndex

Memory to use when storing the event.

§

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: RuntimeComponentInstanceIndex

The specific component instance which is calling the intrinsic.

§async_: bool

If true, indicates the caller instance maybe reentered.

§memory: RuntimeMemoryIndex

Memory to use when storing the event.

§

WaitableSetDrop

A waitable-set.drop intrinsic.

Fields

§instance: RuntimeComponentInstanceIndex

The specific component instance which is calling the intrinsic.

§

WaitableJoin

A waitable.join intrinsic.

Fields

§instance: RuntimeComponentInstanceIndex

The specific component instance which is calling the intrinsic.

§

Yield

A yield intrinsic, which yields control to the host so that other tasks are able to make progress, if any.

Fields

§async_: bool

If true, indicates the caller instance maybe reentered.

§

SubtaskDrop

A subtask.drop intrinsic to drop a specified task which has completed.

Fields

§instance: RuntimeComponentInstanceIndex

The specific component instance which is calling the intrinsic.

§

SubtaskCancel

A subtask.cancel intrinsic to drop an in-progress task.

Fields

§instance: RuntimeComponentInstanceIndex

The specific component instance which is calling the intrinsic.

§async_: bool

If false, block until cancellation completes rather than return BLOCKED.

§

StreamNew

A stream.new intrinsic to create a new stream handle of the specified type.

Fields

§ty: TypeStreamTableIndex

The 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

§ty: TypeStreamTableIndex

The table index for the specific stream type and caller instance.

§options: CanonicalOptions

Any 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

§ty: TypeStreamTableIndex

The table index for the specific stream type and caller instance.

§options: CanonicalOptions

Any 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

§ty: TypeStreamTableIndex

The table index for the specific stream type and caller instance.

§async_: bool

If false, block until cancellation completes rather than return BLOCKED.

§

StreamCancelWrite

A stream.cancel-write intrinsic to cancel an in-progress write from a stream of the specified type.

Fields

§ty: TypeStreamTableIndex

The table index for the specific stream type and caller instance.

§async_: bool

If false, block until cancellation completes rather than return BLOCKED.

§

StreamCloseReadable

A stream.close-readable intrinsic to close the readable end of a stream of the specified type.

Fields

§ty: TypeStreamTableIndex

The table index for the specific stream type and caller instance.

§

StreamCloseWritable

A stream.close-writable intrinsic to close the writable end of a stream of the specified type.

Fields

§ty: TypeStreamTableIndex

The 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

§ty: TypeFutureTableIndex

The 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

§ty: TypeFutureTableIndex

The table index for the specific future type and caller instance.

§options: CanonicalOptions

Any 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

§ty: TypeFutureTableIndex

The table index for the specific future type and caller instance.

§options: CanonicalOptions

Any 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

§ty: TypeFutureTableIndex

The table index for the specific future type and caller instance.

§async_: bool

If false, block until cancellation completes rather than return BLOCKED.

§

FutureCancelWrite

A future.cancel-write intrinsic to cancel an in-progress write from a future of the specified type.

Fields

§ty: TypeFutureTableIndex

The table index for the specific future type and caller instance.

§async_: bool

If false, block until cancellation completes rather than return BLOCKED.

§

FutureCloseReadable

A future.close-readable intrinsic to close the readable end of a future of the specified type.

Fields

§ty: TypeFutureTableIndex

The table index for the specific future type and caller instance.

§

FutureCloseWritable

A future.close-writable intrinsic to close the writable end of a future of the specified type.

Fields

§ty: TypeFutureTableIndex

The 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

§ty: TypeComponentLocalErrorContextTableIndex

The table index for the error-context type in the caller instance.

§options: CanonicalOptions

String 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

§ty: TypeComponentLocalErrorContextTableIndex

The table index for the error-context type in the caller instance.

§options: CanonicalOptions

String encoding, memory, etc. to use when storing debug message.

§

ErrorContextDrop

A error-context.drop intrinsic to drop a specified error-context.

Fields

§ty: TypeComponentLocalErrorContextTableIndex

The 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(u32)

Intrinsic used to implement the context.get component model builtin.

The payload here represents that this is accessing the Nth slot of local storage.

§

ContextSet(u32)

Intrinsic used to implement the context.set component model builtin.

The payload here represents that this is accessing the Nth slot of local storage.

Implementations§

Source§

impl Trampoline

Source

pub fn symbol_name(&self) -> String

Returns the name to use for the symbol of this trampoline in the final compiled artifact

Trait Implementations§

Source§

impl Debug for Trampoline

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.