mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 02:22:26 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			205 lines
		
	
	
	
		
			9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			205 lines
		
	
	
	
		
			9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package util
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 
 | |
| 	"github.com/tetratelabs/wazero"
 | |
| 	"github.com/tetratelabs/wazero/api"
 | |
| )
 | |
| 
 | |
| type i32 interface{ ~int32 | ~uint32 }
 | |
| type i64 interface{ ~int64 | ~uint64 }
 | |
| 
 | |
| type funcVI[T0 i32] func(context.Context, api.Module, T0)
 | |
| 
 | |
| func (fn funcVI[T0]) Call(ctx context.Context, mod api.Module, stack []uint64) {
 | |
| 	fn(ctx, mod, T0(stack[0]))
 | |
| }
 | |
| 
 | |
| func ExportFuncVI[T0 i32](mod wazero.HostModuleBuilder, name string, fn func(context.Context, api.Module, T0)) {
 | |
| 	mod.NewFunctionBuilder().
 | |
| 		WithGoModuleFunction(funcVI[T0](fn),
 | |
| 			[]api.ValueType{api.ValueTypeI32}, nil).
 | |
| 		Export(name)
 | |
| }
 | |
| 
 | |
| type funcVII[T0, T1 i32] func(context.Context, api.Module, T0, T1)
 | |
| 
 | |
| func (fn funcVII[T0, T1]) Call(ctx context.Context, mod api.Module, stack []uint64) {
 | |
| 	_ = stack[1] // prevent bounds check on every slice access
 | |
| 	fn(ctx, mod, T0(stack[0]), T1(stack[1]))
 | |
| }
 | |
| 
 | |
| func ExportFuncVII[T0, T1 i32](mod wazero.HostModuleBuilder, name string, fn func(context.Context, api.Module, T0, T1)) {
 | |
| 	mod.NewFunctionBuilder().
 | |
| 		WithGoModuleFunction(funcVII[T0, T1](fn),
 | |
| 			[]api.ValueType{api.ValueTypeI32, api.ValueTypeI32}, nil).
 | |
| 		Export(name)
 | |
| }
 | |
| 
 | |
| type funcVIII[T0, T1, T2 i32] func(context.Context, api.Module, T0, T1, T2)
 | |
| 
 | |
| func (fn funcVIII[T0, T1, T2]) Call(ctx context.Context, mod api.Module, stack []uint64) {
 | |
| 	_ = stack[2] // prevent bounds check on every slice access
 | |
| 	fn(ctx, mod, T0(stack[0]), T1(stack[1]), T2(stack[2]))
 | |
| }
 | |
| 
 | |
| func ExportFuncVIII[T0, T1, T2 i32](mod wazero.HostModuleBuilder, name string, fn func(context.Context, api.Module, T0, T1, T2)) {
 | |
| 	mod.NewFunctionBuilder().
 | |
| 		WithGoModuleFunction(funcVIII[T0, T1, T2](fn),
 | |
| 			[]api.ValueType{api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32}, nil).
 | |
| 		Export(name)
 | |
| }
 | |
| 
 | |
| type funcVIIII[T0, T1, T2, T3 i32] func(context.Context, api.Module, T0, T1, T2, T3)
 | |
| 
 | |
| func (fn funcVIIII[T0, T1, T2, T3]) Call(ctx context.Context, mod api.Module, stack []uint64) {
 | |
| 	_ = stack[3] // prevent bounds check on every slice access
 | |
| 	fn(ctx, mod, T0(stack[0]), T1(stack[1]), T2(stack[2]), T3(stack[3]))
 | |
| }
 | |
| 
 | |
| func ExportFuncVIIII[T0, T1, T2, T3 i32](mod wazero.HostModuleBuilder, name string, fn func(context.Context, api.Module, T0, T1, T2, T3)) {
 | |
| 	mod.NewFunctionBuilder().
 | |
| 		WithGoModuleFunction(funcVIIII[T0, T1, T2, T3](fn),
 | |
| 			[]api.ValueType{api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32}, nil).
 | |
| 		Export(name)
 | |
| }
 | |
| 
 | |
| type funcVIIIII[T0, T1, T2, T3, T4 i32] func(context.Context, api.Module, T0, T1, T2, T3, T4)
 | |
| 
 | |
| func (fn funcVIIIII[T0, T1, T2, T3, T4]) Call(ctx context.Context, mod api.Module, stack []uint64) {
 | |
| 	_ = stack[4] // prevent bounds check on every slice access
 | |
| 	fn(ctx, mod, T0(stack[0]), T1(stack[1]), T2(stack[2]), T3(stack[3]), T4(stack[4]))
 | |
| }
 | |
| 
 | |
| func ExportFuncVIIIII[T0, T1, T2, T3, T4 i32](mod wazero.HostModuleBuilder, name string, fn func(context.Context, api.Module, T0, T1, T2, T3, T4)) {
 | |
| 	mod.NewFunctionBuilder().
 | |
| 		WithGoModuleFunction(funcVIIIII[T0, T1, T2, T3, T4](fn),
 | |
| 			[]api.ValueType{api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32}, nil).
 | |
| 		Export(name)
 | |
| }
 | |
| 
 | |
| type funcVIIIIJ[T0, T1, T2, T3 i32, T4 i64] func(context.Context, api.Module, T0, T1, T2, T3, T4)
 | |
| 
 | |
| func (fn funcVIIIIJ[T0, T1, T2, T3, T4]) Call(ctx context.Context, mod api.Module, stack []uint64) {
 | |
| 	_ = stack[4] // prevent bounds check on every slice access
 | |
| 	fn(ctx, mod, T0(stack[0]), T1(stack[1]), T2(stack[2]), T3(stack[3]), T4(stack[4]))
 | |
| }
 | |
| 
 | |
| func ExportFuncVIIIIJ[T0, T1, T2, T3 i32, T4 i64](mod wazero.HostModuleBuilder, name string, fn func(context.Context, api.Module, T0, T1, T2, T3, T4)) {
 | |
| 	mod.NewFunctionBuilder().
 | |
| 		WithGoModuleFunction(funcVIIIIJ[T0, T1, T2, T3, T4](fn),
 | |
| 			[]api.ValueType{api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI64}, nil).
 | |
| 		Export(name)
 | |
| }
 | |
| 
 | |
| type funcII[TR, T0 i32] func(context.Context, api.Module, T0) TR
 | |
| 
 | |
| func (fn funcII[TR, T0]) Call(ctx context.Context, mod api.Module, stack []uint64) {
 | |
| 	stack[0] = uint64(fn(ctx, mod, T0(stack[0])))
 | |
| }
 | |
| 
 | |
| func ExportFuncII[TR, T0 i32](mod wazero.HostModuleBuilder, name string, fn func(context.Context, api.Module, T0) TR) {
 | |
| 	mod.NewFunctionBuilder().
 | |
| 		WithGoModuleFunction(funcII[TR, T0](fn),
 | |
| 			[]api.ValueType{api.ValueTypeI32}, []api.ValueType{api.ValueTypeI32}).
 | |
| 		Export(name)
 | |
| }
 | |
| 
 | |
| type funcIII[TR, T0, T1 i32] func(context.Context, api.Module, T0, T1) TR
 | |
| 
 | |
| func (fn funcIII[TR, T0, T1]) Call(ctx context.Context, mod api.Module, stack []uint64) {
 | |
| 	_ = stack[1] // prevent bounds check on every slice access
 | |
| 	stack[0] = uint64(fn(ctx, mod, T0(stack[0]), T1(stack[1])))
 | |
| }
 | |
| 
 | |
| func ExportFuncIII[TR, T0, T1 i32](mod wazero.HostModuleBuilder, name string, fn func(context.Context, api.Module, T0, T1) TR) {
 | |
| 	mod.NewFunctionBuilder().
 | |
| 		WithGoModuleFunction(funcIII[TR, T0, T1](fn),
 | |
| 			[]api.ValueType{api.ValueTypeI32, api.ValueTypeI32}, []api.ValueType{api.ValueTypeI32}).
 | |
| 		Export(name)
 | |
| }
 | |
| 
 | |
| type funcIIII[TR, T0, T1, T2 i32] func(context.Context, api.Module, T0, T1, T2) TR
 | |
| 
 | |
| func (fn funcIIII[TR, T0, T1, T2]) Call(ctx context.Context, mod api.Module, stack []uint64) {
 | |
| 	_ = stack[2] // prevent bounds check on every slice access
 | |
| 	stack[0] = uint64(fn(ctx, mod, T0(stack[0]), T1(stack[1]), T2(stack[2])))
 | |
| }
 | |
| 
 | |
| func ExportFuncIIII[TR, T0, T1, T2 i32](mod wazero.HostModuleBuilder, name string, fn func(context.Context, api.Module, T0, T1, T2) TR) {
 | |
| 	mod.NewFunctionBuilder().
 | |
| 		WithGoModuleFunction(funcIIII[TR, T0, T1, T2](fn),
 | |
| 			[]api.ValueType{api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32}, []api.ValueType{api.ValueTypeI32}).
 | |
| 		Export(name)
 | |
| }
 | |
| 
 | |
| type funcIIIII[TR, T0, T1, T2, T3 i32] func(context.Context, api.Module, T0, T1, T2, T3) TR
 | |
| 
 | |
| func (fn funcIIIII[TR, T0, T1, T2, T3]) Call(ctx context.Context, mod api.Module, stack []uint64) {
 | |
| 	_ = stack[3] // prevent bounds check on every slice access
 | |
| 	stack[0] = uint64(fn(ctx, mod, T0(stack[0]), T1(stack[1]), T2(stack[2]), T3(stack[3])))
 | |
| }
 | |
| 
 | |
| func ExportFuncIIIII[TR, T0, T1, T2, T3 i32](mod wazero.HostModuleBuilder, name string, fn func(context.Context, api.Module, T0, T1, T2, T3) TR) {
 | |
| 	mod.NewFunctionBuilder().
 | |
| 		WithGoModuleFunction(funcIIIII[TR, T0, T1, T2, T3](fn),
 | |
| 			[]api.ValueType{api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32}, []api.ValueType{api.ValueTypeI32}).
 | |
| 		Export(name)
 | |
| }
 | |
| 
 | |
| type funcIIIIII[TR, T0, T1, T2, T3, T4 i32] func(context.Context, api.Module, T0, T1, T2, T3, T4) TR
 | |
| 
 | |
| func (fn funcIIIIII[TR, T0, T1, T2, T3, T4]) Call(ctx context.Context, mod api.Module, stack []uint64) {
 | |
| 	_ = stack[4] // prevent bounds check on every slice access
 | |
| 	stack[0] = uint64(fn(ctx, mod, T0(stack[0]), T1(stack[1]), T2(stack[2]), T3(stack[3]), T4(stack[4])))
 | |
| }
 | |
| 
 | |
| func ExportFuncIIIIII[TR, T0, T1, T2, T3, T4 i32](mod wazero.HostModuleBuilder, name string, fn func(context.Context, api.Module, T0, T1, T2, T3, T4) TR) {
 | |
| 	mod.NewFunctionBuilder().
 | |
| 		WithGoModuleFunction(funcIIIIII[TR, T0, T1, T2, T3, T4](fn),
 | |
| 			[]api.ValueType{api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32}, []api.ValueType{api.ValueTypeI32}).
 | |
| 		Export(name)
 | |
| }
 | |
| 
 | |
| type funcIIIIIII[TR, T0, T1, T2, T3, T4, T5 i32] func(context.Context, api.Module, T0, T1, T2, T3, T4, T5) TR
 | |
| 
 | |
| func (fn funcIIIIIII[TR, T0, T1, T2, T3, T4, T5]) Call(ctx context.Context, mod api.Module, stack []uint64) {
 | |
| 	_ = stack[5] // prevent bounds check on every slice access
 | |
| 	stack[0] = uint64(fn(ctx, mod, T0(stack[0]), T1(stack[1]), T2(stack[2]), T3(stack[3]), T4(stack[4]), T5(stack[5])))
 | |
| }
 | |
| 
 | |
| func ExportFuncIIIIIII[TR, T0, T1, T2, T3, T4, T5 i32](mod wazero.HostModuleBuilder, name string, fn func(context.Context, api.Module, T0, T1, T2, T3, T4, T5) TR) {
 | |
| 	mod.NewFunctionBuilder().
 | |
| 		WithGoModuleFunction(funcIIIIIII[TR, T0, T1, T2, T3, T4, T5](fn),
 | |
| 			[]api.ValueType{api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32}, []api.ValueType{api.ValueTypeI32}).
 | |
| 		Export(name)
 | |
| }
 | |
| 
 | |
| type funcIIIIJ[TR, T0, T1, T2 i32, T3 i64] func(context.Context, api.Module, T0, T1, T2, T3) TR
 | |
| 
 | |
| func (fn funcIIIIJ[TR, T0, T1, T2, T3]) Call(ctx context.Context, mod api.Module, stack []uint64) {
 | |
| 	_ = stack[3] // prevent bounds check on every slice access
 | |
| 	stack[0] = uint64(fn(ctx, mod, T0(stack[0]), T1(stack[1]), T2(stack[2]), T3(stack[3])))
 | |
| }
 | |
| 
 | |
| func ExportFuncIIIIJ[TR, T0, T1, T2 i32, T3 i64](mod wazero.HostModuleBuilder, name string, fn func(context.Context, api.Module, T0, T1, T2, T3) TR) {
 | |
| 	mod.NewFunctionBuilder().
 | |
| 		WithGoModuleFunction(funcIIIIJ[TR, T0, T1, T2, T3](fn),
 | |
| 			[]api.ValueType{api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI32, api.ValueTypeI64}, []api.ValueType{api.ValueTypeI32}).
 | |
| 		Export(name)
 | |
| }
 | |
| 
 | |
| type funcIIJ[TR, T0 i32, T1 i64] func(context.Context, api.Module, T0, T1) TR
 | |
| 
 | |
| func (fn funcIIJ[TR, T0, T1]) Call(ctx context.Context, mod api.Module, stack []uint64) {
 | |
| 	_ = stack[1] // prevent bounds check on every slice access
 | |
| 	stack[0] = uint64(fn(ctx, mod, T0(stack[0]), T1(stack[1])))
 | |
| }
 | |
| 
 | |
| func ExportFuncIIJ[TR, T0 i32, T1 i64](mod wazero.HostModuleBuilder, name string, fn func(context.Context, api.Module, T0, T1) TR) {
 | |
| 	mod.NewFunctionBuilder().
 | |
| 		WithGoModuleFunction(funcIIJ[TR, T0, T1](fn),
 | |
| 			[]api.ValueType{api.ValueTypeI32, api.ValueTypeI64}, []api.ValueType{api.ValueTypeI32}).
 | |
| 		Export(name)
 | |
| }
 |