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  }