//go:build wasm //:build wasm package callback import "unsafe" //:wasmexport __cb0 func Dispatch0(id int32) { fn, ok := lookup(id) if !ok { return } if f, ok := fn.(func()); ok { f() } } //:wasmexport __cbs func DispatchS(id int32, ptr *byte, length int32) { fn, ok := lookup(id) if !ok { return } s := ptrToString(ptr, length) if f, ok := fn.(func(string)); ok { f(s) } } //:wasmexport __cbb func DispatchB(id int32, val int32) { fn, ok := lookup(id) if !ok { return } if f, ok := fn.(func(bool)); ok { f(val != 0) } } //:wasmexport __cbi func DispatchI(id int32, val int32) { fn, ok := lookup(id) if !ok { return } if f, ok := fn.(func(int32)); ok { f(val) } } //:wasmexport __cbis func DispatchIS(id int32, ival int32, ptr *byte, length int32) { fn, ok := lookup(id) if !ok { return } s := ptrToString(ptr, length) if f, ok := fn.(func(int32, string)); ok { f(ival, s) } } //:wasmexport __cbiis func DispatchIIS(id int32, a int32, b int32, ptr *byte, length int32) { fn, ok := lookup(id) if !ok { return } s := ptrToString(ptr, length) if f, ok := fn.(func(int32, int32, string)); ok { f(a, b, s) } } //:wasmexport __cbss func DispatchSS(id int32, ptr1 *byte, len1 int32, ptr2 *byte, len2 int32) { fn, ok := lookup(id) if !ok { return } s1 := ptrToString(ptr1, len1) s2 := ptrToString(ptr2, len2) if f, ok := fn.(func(string, string)); ok { f(s1, s2) } } //:wasmexport __cb6i func Dispatch6I(id int32, a int32, b int32, c int32, d int32, e int32, f int32) { fn, ok := lookup(id) if !ok { return } if cb, ok := fn.(func(int32, int32, int32, int32, int32, int32)); ok { cb(a, b, c, d, e, f) } } //:wasmexport __cbii func DispatchII(id int32, a int32, b int32) { fn, ok := lookup(id) if !ok { return } if f, ok := fn.(func(int32, int32)); ok { f(a, b) } } //:wasmexport __cbiii func DispatchIII(id int32, a int32, b int32, c int32) { fn, ok := lookup(id) if !ok { return } if f, ok := fn.(func(int32, int32, int32)); ok { f(a, b, c) } } //:wasmexport __cbdata func DispatchBytes(id int32, ptr *byte, length int32) { fn, ok := lookup(id) if !ok { return } if length <= 0 { if f, ok := fn.(func([]byte)); ok { f(nil) } return } b := ptrToBytes(ptr, length) if f, ok := fn.(func([]byte)); ok { f(b) } } //:wasmexport __cb_release func DispatchRelease(id int32) { delete(table, id) } func ptrToBytes(ptr *byte, length int32) (buf []byte) { if ptr == nil || length <= 0 { return nil } return unsafe.Slice(ptr, length) } func ptrToString(ptr *byte, length int32) (s string) { if ptr == nil || length <= 0 { return "" } return unsafe.String(ptr, length) }