github.com/goccy/go-jit@v0.0.0-20200514131505-ff78d45cf6af/_examples/gofunc.go (about) 1 package main 2 3 import ( 4 "fmt" 5 6 "github.com/goccy/go-jit" 7 ) 8 9 // func f() int { 10 // return callback(7, 8) 11 // } 12 13 func callback(i, j int) int { 14 fmt.Printf("callback: i = %d j = %d\n", i, j) 15 return i * j 16 } 17 18 func main() { 19 ctx := jit.NewContext() 20 defer ctx.Close() 21 f, err := ctx.Build(func(ctx *jit.Context) (*jit.Function, error) { 22 f := ctx.CreateFunction(nil, jit.TypeInt) 23 rvalues, err := f.GoCall(callback, []*jit.Value{ 24 f.CreateIntValue(7), f.CreateIntValue(8), 25 }) 26 if err != nil { 27 return nil, err 28 } 29 f.Return(rvalues[0]) 30 f.Compile() 31 return f, nil 32 }) 33 if err != nil { 34 panic(err) 35 } 36 fmt.Println("result = ", f.Run()) 37 }