Enum Trampoline

Source
pub enum Trampoline {
Show 38 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), TaskBackpressure { instance: RuntimeComponentInstanceIndex, }, TaskReturn, TaskWait { instance: RuntimeComponentInstanceIndex, async_: bool, memory: RuntimeMemoryIndex, }, TaskPoll { instance: RuntimeComponentInstanceIndex, async_: bool, memory: RuntimeMemoryIndex, }, TaskYield { async_: bool, }, SubtaskDrop { instance: RuntimeComponentInstanceIndex, }, 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, AsyncEnterCall, AsyncExitCall { callback: Option<RuntimeCallbackIndex>, post_return: Option<RuntimePostReturnIndex>, }, FutureTransfer, StreamTransfer, ErrorContextTransfer,
}
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.

§

TaskBackpressure

A task.backpressure 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.

§

TaskWait

A task.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.

§

TaskPoll

A task.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.

§

TaskYield

A task.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.

§

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.

§

AsyncEnterCall

An intrinsic used by FACT-generated modules to begin a call to an async-lowered import function.

§

AsyncExitCall

An intrinsic used by FACT-generated modules to complete a call to an async-lowered import function.

Note that AsyncEnterCall and AsyncExitCall 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.

Transfering 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.

Transfering 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.

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

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.