NOTE: This is for internal usage only and not intended for end-users (yet). See tracking issue for eventually exposing this at github.com/dart-lang/sdk/issues/55856
To import a function, declare it as a global, external function and mark it with a wasm:import
pragma indicating the imported name (which must be two identifiers separated by a dot):
@pragma("wasm:import", "foo.bar") external void fooBar(Object object);
which will call foo.bar
on the host side:
var foo = { bar: function(object) { /* implementation here */ } };
To export a function, mark it with a wasm:export
pragma:
@pragma("wasm:export") void foo(double x) { /* implementation here */ } @pragma("wasm:export", "baz") void bar(double x) { /* implementation here */ }
With the Wasm module instance in inst
, these can be called as:
inst.exports.foo(1); inst.exports.baz(2);
In the signatures of imported and exported functions, use the following types:
double
.JSAny
, which translates to the Wasm externref
type. These can be passed around and stored as opaque values on the Dart side.anyref
and automatically converted to and from externref
at the boundary