package main import ( "context" "flag" "os" "github.com/Xe/ln" ) func main() { ctx, cancel := context.WithCancel(context.Background()) defer cancel() flag.Parse() if flag.NArg() != 1 { ln.Fatal(ctx, ln.Info("please pass a webassembly file to run")) } fname := flag.Arg(0) fin, err := os.Open(fname) if err != nil { ln.FatalErr(ctx, err, ln.F{"msg": "can't open file", "fname": fname}) } defer fin.Close() p, err := NewProcess(fin) if err != nil { ln.FatalErr(ctx, err, ln.F{"msg": "can't create process", "fname": fname}) } foundMain := false mainID := uint32(0) for name, entry := range p.mod.Export.Entries { if name == "main" && entry.FieldStr == "main" { mainID = entry.Index foundMain = true break } } if !foundMain { ln.Fatal(ctx, ln.F{"msg": "no main function exported"}) } _, err = p.vm.ExecCode(int64(mainID)) if err != nil { ln.FatalErr(ctx, err) } }