Expand description
A dataflow-graph-like intermediate representation of a component
This module contains ComponentDfg
which is an intermediate step towards
becoming a full-fledged Component
. The main purpose for the existence of
this representation of a component is to track dataflow between various
items within a component and support edits to them after the initial inlined
translation of a component.
Currently fused adapters are represented with a core WebAssembly module
which gets “injected” into the final component as-if the component already
bundled it. In doing so the adapter modules need to be partitioned and
inserted into the final sequence of modules to instantiate. While this is
possible to do with a flat GlobalInitializer
list it gets unwieldy really
quickly especially when other translation features are added.
This module is largely a duplicate of the component::info
module in this
crate. The hierarchy here uses *Id
types instead of *Index
types to
represent that they don’t have any necessary implicit ordering. Additionally
nothing is kept in an ordered list and instead this is worked with in a
general dataflow fashion where dependencies are walked during processing.
The ComponentDfg::finish
method will convert the dataflow graph to a
linearized GlobalInitializer
list which is intended to not be edited after
it’s created.
The ComponentDfg
is created as part of the component::inline
phase of
translation where the dataflow performed there allows identification of
fused adapters, what arguments make their way to core wasm modules, etc.
Structs§
- Same as
info::CanonicalOptions
- Same as
info::CoreExport
- A helper structure to “intern” and deduplicate values of type
V
with an identifying keyK
. - Same as
info::Resource
Enums§
- Same as
info::CoreDef
, except has an extraAdapter
variant. - Same as
info::Export
- Same as
info::InstantiateModule
- Possible side effects that are possible with instantiating this component.
- Same as
info::Trampoline