mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile: add basic wasmexport support
This CL adds a compiler directive go:wasmexport, which applies to a Go function and makes it an exported function of the Wasm module being built, so it can be called directly from the host. As proposed in #65199, parameter and result types are limited to 32-bit and 64-bit integers and floats, and there can be at most one result. As the Go and Wasm calling conventions are different, for a wasmexport function we generate a wrapper function does the ABI conversion at compile time. Currently this CL only adds basic support. In particular, - it only supports executable mode, i.e. the Go wasm module calls into the host via wasmimport, which then calls back to Go via wasmexport. Library (c-shared) mode is not implemented yet. - only supports wasip1, not js. - if the exported function unwinds stacks (goroutine switch, stack growth, etc.), it probably doesn't work. TODO: support stack unwinding, c-shared mode, js. For #65199. Change-Id: Id1777c2d44f7d51942c1caed3173c0a82f120cc4 Reviewed-on: https://go-review.googlesource.com/c/go/+/603055 Reviewed-by: Than McIntosh <thanm@golang.org> Reviewed-by: Randy Reddig <randy.reddig@fastly.com> Reviewed-by: David Chase <drchase@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
parent
ff2a57ba92
commit
1cf6e31f0d
17 changed files with 331 additions and 21 deletions
|
|
@ -142,6 +142,9 @@ type Func struct {
|
|||
// WasmImport is used by the //go:wasmimport directive to store info about
|
||||
// a WebAssembly function import.
|
||||
WasmImport *WasmImport
|
||||
// WasmExport is used by the //go:wasmexport directive to store info about
|
||||
// a WebAssembly function import.
|
||||
WasmExport *WasmExport
|
||||
}
|
||||
|
||||
// WasmImport stores metadata associated with the //go:wasmimport pragma.
|
||||
|
|
@ -150,6 +153,11 @@ type WasmImport struct {
|
|||
Name string
|
||||
}
|
||||
|
||||
// WasmExport stores metadata associated with the //go:wasmexport pragma.
|
||||
type WasmExport struct {
|
||||
Name string
|
||||
}
|
||||
|
||||
// NewFunc returns a new Func with the given name and type.
|
||||
//
|
||||
// fpos is the position of the "func" token, and npos is the position
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue