Add a first-class way of accessing caller's exports (#1290)
* Add a first-class way of accessing caller's exports This commit is a continuation of #1237 and updates the API of `Func` to allow defining host functions which have easy access to a caller's memory in particular. The new APIs look like so: * The `Func::wrap*` family of functions was condensed into one `Func::wrap` function. * The ABI layer of conversions in `WasmTy` were removed * An optional `Caller<'_>` argument can be at the front of all host-defined functions now. The old way the wasi bindings looked up memory has been removed and is now replaced with the `Caller` type. The `Caller` type has a `get_export` method on it which allows looking up a caller's export by name, allowing you to get access to the caller's memory easily, and even during instantiation. * Add a temporary note * Move some docs
This commit is contained in:
@@ -62,7 +62,7 @@ fn cross_store() -> anyhow::Result<()> {
|
||||
|
||||
// ============ Cross-store instantiation ==============
|
||||
|
||||
let func = Func::wrap0(&store2, || {});
|
||||
let func = Func::wrap(&store2, || {});
|
||||
let ty = GlobalType::new(ValType::I32, Mutability::Const);
|
||||
let global = Global::new(&store2, ty, Val::I32(0))?;
|
||||
let ty = MemoryType::new(Limits::new(1, None));
|
||||
@@ -84,8 +84,8 @@ fn cross_store() -> anyhow::Result<()> {
|
||||
|
||||
// ============ Cross-store globals ==============
|
||||
|
||||
let store1val = Val::FuncRef(Func::wrap0(&store1, || {}));
|
||||
let store2val = Val::FuncRef(Func::wrap0(&store2, || {}));
|
||||
let store1val = Val::FuncRef(Func::wrap(&store1, || {}));
|
||||
let store2val = Val::FuncRef(Func::wrap(&store2, || {}));
|
||||
|
||||
let ty = GlobalType::new(ValType::FuncRef, Mutability::Var);
|
||||
assert!(Global::new(&store2, ty.clone(), store1val.clone()).is_err());
|
||||
|
||||
Reference in New Issue
Block a user