* cranelift-wasm: replace `WasmTypesMap` with `ModuleTranslationState`
The `ModuleTranslationState` contains information decoded from the Wasm module
that must be referenced during each Wasm function's translation.
This is only for data that is maintained by `cranelift-wasm` itself, as opposed
to being maintained by the embedder. Data that is maintained by the embedder is
represented with `ModuleEnvironment`.
A `ModuleTranslationState` is returned by `translate_module`, and can then be
used when translating functions from that module.
* cranelift-wasm: rename `TranslationState` to `FuncTranslationState`
To disambiguate a bit with the new `ModuleTranslationState`.
* cranelift-wasm: Reorganize the internal `state` module into submodules
One module for the `ModuleTranslationState` and another for the
`FuncTranslationState`.
* cranelift-wasm: replace `FuncTranslator` with methods on `ModuleTranslationState`
`FuncTranslator` was two methods that always took ownership of `self`, so it
didn't really make sense as an object as opposed to two different functions, or
in this case methods on the object that actually persists for a longer time.
I think this improves ergonomics nicely.
Before:
```rust
let module_translation = translate_module(...)?;
for body in func_bodies {
let mut translator = FuncTranslator::new();
translator.translate(body, ...)?;
}
```
After:
```rust
let module_translation = translate_module(...)?;
for body in func_bodies {
module_translation.translate_func(body, ...)?;
}
```
Note that this commit does not remove `FuncTranslator`. It still exists, but is
just a wrapper over the `ModuleTranslationState` methods, and it is marked
deprecated, so that downstream users get a heads up. This should make the
transition easier.
* Revert "cranelift-wasm: replace `FuncTranslator` with methods on `ModuleTranslationState`"
This reverts commit 075f9ae933bcaae39348b61287c8f78a4009340d.
76 lines
2.4 KiB
Rust
76 lines
2.4 KiB
Rust
//! Performs translation from a wasm module in binary format to the in-memory form
|
|
//! of Cranelift IR. More particularly, it translates the code of all the functions bodies and
|
|
//! interacts with an environment implementing the
|
|
//! [`ModuleEnvironment`](trait.ModuleEnvironment.html)
|
|
//! trait to deal with tables, globals and linear memory.
|
|
//!
|
|
//! The crate provides a `DummyEnvironment` struct that will allow to translate the code of the
|
|
//! functions but will fail at execution.
|
|
//!
|
|
//! The main function of this module is [`translate_module`](fn.translate_module.html).
|
|
|
|
#![deny(missing_docs, trivial_numeric_casts, unused_extern_crates)]
|
|
#![warn(unused_import_braces)]
|
|
#![cfg_attr(feature = "std", deny(unstable_features))]
|
|
#![cfg_attr(feature = "clippy", plugin(clippy(conf_file = "../../clippy.toml")))]
|
|
#![cfg_attr(feature = "cargo-clippy", allow(clippy::new_without_default))]
|
|
#![cfg_attr(
|
|
feature = "cargo-clippy",
|
|
warn(
|
|
clippy::float_arithmetic,
|
|
clippy::mut_mut,
|
|
clippy::nonminimal_bool,
|
|
clippy::option_map_unwrap_or,
|
|
clippy::option_map_unwrap_or_else,
|
|
clippy::print_stdout,
|
|
clippy::unicode_not_nfc,
|
|
clippy::use_self
|
|
)
|
|
)]
|
|
#![no_std]
|
|
|
|
#[cfg(not(feature = "std"))]
|
|
#[macro_use]
|
|
extern crate alloc as std;
|
|
#[cfg(feature = "std")]
|
|
#[macro_use]
|
|
extern crate std;
|
|
|
|
#[cfg(not(feature = "std"))]
|
|
use hashbrown::{
|
|
hash_map,
|
|
hash_map::Entry::{Occupied, Vacant},
|
|
HashMap,
|
|
};
|
|
#[cfg(feature = "std")]
|
|
use std::collections::{
|
|
hash_map,
|
|
hash_map::Entry::{Occupied, Vacant},
|
|
HashMap,
|
|
};
|
|
|
|
mod code_translator;
|
|
mod environ;
|
|
mod func_translator;
|
|
mod module_translator;
|
|
mod sections_translator;
|
|
mod state;
|
|
mod translation_utils;
|
|
|
|
pub use crate::environ::{
|
|
DummyEnvironment, FuncEnvironment, GlobalVariable, ModuleEnvironment, ReturnMode, WasmError,
|
|
WasmResult,
|
|
};
|
|
pub use crate::func_translator::FuncTranslator;
|
|
pub use crate::module_translator::translate_module;
|
|
pub use crate::state::func_state::FuncTranslationState;
|
|
pub use crate::state::module_state::ModuleTranslationState;
|
|
pub use crate::translation_utils::{
|
|
get_vmctx_value_label, DefinedFuncIndex, DefinedGlobalIndex, DefinedMemoryIndex,
|
|
DefinedTableIndex, FuncIndex, Global, GlobalIndex, GlobalInit, Memory, MemoryIndex,
|
|
SignatureIndex, Table, TableElementType, TableIndex,
|
|
};
|
|
|
|
/// Version number of this crate.
|
|
pub const VERSION: &str = env!("CARGO_PKG_VERSION");
|