...
1
2
3 package run
4
5 import (
6 "context"
7
8 "github.com/tetratelabs/wazero"
9 "github.com/tetratelabs/wazero/internal/gojs"
10 "github.com/tetratelabs/wazero/internal/gojs/config"
11 "github.com/tetratelabs/wazero/sys"
12 )
13
14 func Run(ctx context.Context, r wazero.Runtime, compiled wazero.CompiledModule, moduleConfig wazero.ModuleConfig, config *config.Config) error {
15 if err := config.Init(); err != nil {
16 return err
17 }
18
19
20 mod, err := r.InstantiateModule(ctx, compiled, moduleConfig)
21 if err != nil {
22 return err
23 }
24 defer mod.Close(ctx)
25
26
27 argc, argv, err := gojs.WriteArgsAndEnviron(mod)
28 if err != nil {
29 return err
30 }
31
32
33 ctx = context.WithValue(ctx, gojs.StateKey{}, gojs.NewState(config))
34
35
36 _, err = mod.ExportedFunction("run").Call(ctx, uint64(argc), uint64(argv))
37 if se, ok := err.(*sys.ExitError); ok {
38 if se.ExitCode() == 0 {
39 err = nil
40 }
41 }
42 return err
43 }
44
View as plain text