Before, we introduced a type `api.ImportRenamer` to resolve conflicts where the "env" module was shared between AssemblyScript and user-defined functions. This API was never used in GitHub, and is complicated. AssemblyScript also isn't the only ABI to share the "env" module, as other web APIs like Emscripten do also. The less complicated approach is to have packages that need to share "env" use `ModuleBuilder.ExportFunctions` instead, and use namespaces as needed if there is overlap. Signed-off-by: Adrian Cole <adrian@tetrate.io>
46 lines
1.2 KiB
Go
46 lines
1.2 KiB
Go
package assemblyscript_test
|
|
|
|
import (
|
|
"context"
|
|
_ "embed"
|
|
"log"
|
|
|
|
"github.com/tetratelabs/wazero"
|
|
"github.com/tetratelabs/wazero/assemblyscript"
|
|
)
|
|
|
|
// This shows how to instantiate AssemblyScript's special imports.
|
|
func Example_instantiate() {
|
|
ctx := context.Background()
|
|
|
|
r := wazero.NewRuntime()
|
|
defer r.Close(ctx) // This closes everything this Runtime created.
|
|
|
|
// This adds the "env" module to the runtime, with AssemblyScript's special
|
|
// function imports.
|
|
if _, err := assemblyscript.Instantiate(ctx, r); err != nil {
|
|
log.Panicln(err)
|
|
}
|
|
|
|
// Output:
|
|
}
|
|
|
|
// This shows how to instantiate AssemblyScript's special imports when you also
|
|
// need other functions in the "env" module.
|
|
func Example_functionExporter() {
|
|
ctx := context.Background()
|
|
|
|
r := wazero.NewRuntime()
|
|
defer r.Close(ctx) // This closes everything this Runtime created.
|
|
|
|
// First construct your own module builder for "env"
|
|
envBuilder := r.NewModuleBuilder("env").
|
|
ExportFunction("get_int", func() uint32 { return 1 })
|
|
|
|
// Now, add AssemblyScript special function imports into it.
|
|
envBuilder.ExportFunctions(assemblyscript.NewFunctionExporter().
|
|
WithAbortMessageDisabled().ExportFunctions())
|
|
|
|
// Output:
|
|
}
|