Imports #
"fmt"
"example.com/pgo/devirtualize/mult.pkg"
"fmt"
"example.com/pgo/devirtualize/mult.pkg"
var sink inttype AddFunc func(int, int) inttype Adder interface {
Add(a int, b int) int
}type Add struct {
}type Sub struct {
}func (Add) Add(a int, b int) intfunc (Sub) Add(a int, b int) intgo:noinline
func AddClosure() AddFuncfunc AddFn(a int, b int) intExerciseFuncClosure calls mostly a1 and m1. This is a simplified version of ExerciseFuncConcrete, but we need two distinct call sites to test two different types of function values. go:noinline
func ExerciseFuncClosure(iter int, a1 AddFunc, a2 AddFunc, m1 mult.MultFunc, m2 mult.MultFunc) intExerciseFuncConcrete calls mostly a1 and m1. go:noinline
func ExerciseFuncConcrete(iter int, a1 AddFunc, a2 AddFunc, m1 mult.MultFunc, m2 mult.MultFunc) intExerciseFuncField calls mostly a1 and m1. This is a simplified version of ExerciseFuncConcrete, but accessing the function values via a struct field. go:noinline
func ExerciseFuncField(iter int, a1 AddFunc, a2 AddFunc, m1 mult.MultFunc, m2 mult.MultFunc) intExerciseIface calls mostly a1 and m1. go:noinline
func ExerciseIface(iter int, a1 Adder, a2 Adder, m1 mult.Multiplier, m2 mult.Multiplier) intgo:noinline
func SubClosure() AddFuncfunc SubFn(a int, b int) intGenerated with Arrow