Skip to content

Commit 708a56d

Browse files
Merge pull request #6 from codefromthecrypt/reflection-free
Changes generator to not use reflection for host functions
2 parents 145881b + 5ac6117 commit 708a56d

18 files changed

+63
-28
lines changed

examples/helloworld/greeting/greet.pb.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/helloworld/greeting/greet_host.pb.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/helloworld/greeting/greet_plugin.pb.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/helloworld/greeting/greet_vtproto.pb.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/host-functions/greeting/greet.pb.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/host-functions/greeting/greet_host.pb.go

+22-7
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/host-functions/greeting/greet_plugin.pb.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/host-functions/greeting/greet_vtproto.pb.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/known-types/known/known.pb.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/known-types/known/known_host.pb.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/known-types/known/known_plugin.pb.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/known-types/known/known_vtproto.pb.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/wasi/cat/cat.pb.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/wasi/cat/cat_host.pb.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/wasi/cat/cat_plugin.pb.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/wasi/cat/cat_vtproto.pb.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

gen/host.go

+13-3
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,11 @@ func (gg *Generator) genHostFunctions(g *protogen.GeneratedFile, f *fileInfo) {
3535
// Define host functions
3636
structName := "_" + strings.ToLower(f.hostService.GoName[:1]) + f.hostService.GoName[1:]
3737
g.P(fmt.Sprintf(`
38+
const (
39+
i32 = api.ValueTypeI32
40+
i64 = api.ValueTypeI64
41+
)
42+
3843
type %s struct {
3944
%s
4045
}
@@ -47,7 +52,10 @@ func (gg *Generator) genHostFunctions(g *protogen.GeneratedFile, f *fileInfo) {
4752
envBuilder := r.NewHostModuleBuilder("env")`, structName))
4853
for _, method := range f.hostService.Methods {
4954
g.P(fmt.Sprintf(`
50-
envBuilder.NewFunctionBuilder().WithFunc(h._%s).Export("%s")`,
55+
envBuilder.NewFunctionBuilder().
56+
WithGoModuleFunction(api.GoModuleFunc(h._%s), []api.ValueType{i32, i32}, []api.ValueType{i64}).
57+
WithParameterNames("offset", "size").
58+
Export("%s")`,
5159
method.GoName, toSnakeCase(method.GoName)))
5260
}
5361
g.P(`
@@ -61,12 +69,13 @@ func (gg *Generator) genHostFunctions(g *protogen.GeneratedFile, f *fileInfo) {
6169
}`
6270
for _, method := range f.hostService.Methods {
6371
g.P(method.Comments.Leading, fmt.Sprintf(`
64-
func (h %s) _%s(ctx %s, m %s, offset, size uint32) uint64 {`,
72+
func (h %s) _%s(ctx %s, m %s, params []uint64) []uint64 {`,
6573
structName,
6674
method.GoName,
6775
g.QualifiedGoIdent(contextPackage.Ident("Context")),
6876
g.QualifiedGoIdent(wazeroAPIPackage.Ident("Module")),
6977
))
78+
g.P("offset, size := uint32(params[0]), uint32(params[1])")
7079
g.P("buf, err := ", g.QualifiedGoIdent(pluginWasmPackage.Ident("ReadMemory")), "(ctx, m, offset, size)")
7180
g.P(errorHandling)
7281

@@ -83,7 +92,8 @@ func (gg *Generator) genHostFunctions(g *protogen.GeneratedFile, f *fileInfo) {
8392
g.P("ptr, err := ", g.QualifiedGoIdent(pluginWasmPackage.Ident("WriteMemory")), "(ctx, m, buf)")
8493
g.P(errorHandling)
8594

86-
g.P("return (ptr << uint64(32)) | uint64(len(buf))")
95+
g.P("ptrLen := (ptr << uint64(32)) | uint64(len(buf))")
96+
g.P("return []uint64{ptrLen}")
8797
g.P("}")
8898
}
8999
}

tests/host-functions/proto/host_host.pb.go

+13-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)