aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/noder/noder.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/compile/internal/noder/noder.go')
-rw-r--r--src/cmd/compile/internal/noder/noder.go27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/cmd/compile/internal/noder/noder.go b/src/cmd/compile/internal/noder/noder.go
index 1652dc6618..7905c374c5 100644
--- a/src/cmd/compile/internal/noder/noder.go
+++ b/src/cmd/compile/internal/noder/noder.go
@@ -171,6 +171,7 @@ type pragmas struct {
Pos []pragmaPos // position of each individual flag
Embeds []pragmaEmbed
WasmImport *WasmImport
+ WasmExport *WasmExport
}
// WasmImport stores metadata associated with the //go:wasmimport pragma
@@ -180,6 +181,12 @@ type WasmImport struct {
Name string
}
+// WasmExport stores metadata associated with the //go:wasmexport pragma
+type WasmExport struct {
+ Pos syntax.Pos
+ Name string
+}
+
type pragmaPos struct {
Flag ir.PragmaFlag
Pos syntax.Pos
@@ -204,6 +211,9 @@ func (p *noder) checkUnusedDuringParse(pragma *pragmas) {
if pragma.WasmImport != nil {
p.error(syntax.Error{Pos: pragma.WasmImport.Pos, Msg: "misplaced go:wasmimport directive"})
}
+ if pragma.WasmExport != nil {
+ p.error(syntax.Error{Pos: pragma.WasmExport.Pos, Msg: "misplaced go:wasmexport directive"})
+ }
}
// pragma is called concurrently if files are parsed concurrently.
@@ -246,6 +256,23 @@ func (p *noder) pragma(pos syntax.Pos, blankLine bool, text string, old syntax.P
Name: f[2],
}
}
+
+ case strings.HasPrefix(text, "go:wasmexport "):
+ f := strings.Fields(text)
+ if len(f) != 2 {
+ // TODO: maybe make the name optional? It was once mentioned on proposal 65199.
+ p.error(syntax.Error{Pos: pos, Msg: "usage: //go:wasmexport exportname"})
+ break
+ }
+
+ if buildcfg.GOARCH == "wasm" {
+ // Only actually use them if we're compiling to WASM though.
+ pragma.WasmExport = &WasmExport{
+ Pos: pos,
+ Name: f[1],
+ }
+ }
+
case strings.HasPrefix(text, "go:linkname "):
f := strings.Fields(text)
if !(2 <= len(f) && len(f) <= 3) {