Remove the need for HostRef<Module> (#778)

* Remove the need for `HostRef<Module>`

This commit continues previous work and also #708 by removing the need
to use `HostRef<Module>` in the API of the `wasmtime` crate. The API
changes performed here are:

* The `Module` type is now itself internally reference counted.
* The `Module::store` function now returns the `Store` that was used to
  create a `Module`
* Documentation for `Module` and its methods have been expanded.

* Fix compliation of test programs harness

* Fix the python extension

* Update `CodeMemory` to be `Send + Sync`

This commit updates the `CodeMemory` type in wasmtime to be both `Send`
and `Sync` by updating the implementation of `Mmap` to not store raw
pointers. This avoids the need for an `unsafe impl` and leaves the
unsafety as it is currently.

* Fix a typo
This commit is contained in:
Alex Crichton
2020-01-08 14:42:37 -06:00
committed by GitHub
parent c975a92a3a
commit 7b33f1c619
22 changed files with 221 additions and 130 deletions

View File

@@ -234,15 +234,14 @@ impl RunCommand {
store: &Store,
module_registry: &HashMap<String, HostRef<Instance>>,
path: &Path,
) -> Result<(HostRef<Instance>, HostRef<Module>, Vec<u8>)> {
) -> Result<(HostRef<Instance>, Module, Vec<u8>)> {
// Read the wasm module binary either as `*.wat` or a raw binary
let data = wat::parse_file(path)?;
let module = HostRef::new(Module::new(store, &data)?);
let module = Module::new(store, &data)?;
// Resolve import using module_registry.
let imports = module
.borrow()
.imports()
.iter()
.map(|i| {
@@ -285,7 +284,6 @@ impl RunCommand {
let data = ModuleData::new(&data)?;
self.invoke_export(instance, &data, name)?;
} else if module
.borrow()
.exports()
.iter()
.any(|export| export.name().is_empty())