devirt

Imports

Imports #

"fmt"
"example.com/pgo/devirtualize/mult.pkg"

Constants & Variables

sink var #

var sink int

Type Aliases

AddFunc type #

type AddFunc func(int, int) int

Interfaces

Adder interface #

type Adder interface {
Add(a int, b int) int
}

Structs

Add struct #

type Add struct {

}

Sub struct #

type Sub struct {

}

Functions

Add method #

func (Add) Add(a int, b int) int

Add method #

func (Sub) Add(a int, b int) int

AddClosure function #

go:noinline

func AddClosure() AddFunc

AddFn function #

func AddFn(a int, b int) int

ExerciseFuncClosure function #

ExerciseFuncClosure 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) int

ExerciseFuncConcrete function #

ExerciseFuncConcrete calls mostly a1 and m1. go:noinline

func ExerciseFuncConcrete(iter int, a1 AddFunc, a2 AddFunc, m1 mult.MultFunc, m2 mult.MultFunc) int

ExerciseFuncField function #

ExerciseFuncField 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) int

ExerciseIface function #

ExerciseIface calls mostly a1 and m1. go:noinline

func ExerciseIface(iter int, a1 Adder, a2 Adder, m1 mult.Multiplier, m2 mult.Multiplier) int

SubClosure function #

go:noinline

func SubClosure() AddFunc

SubFn function #

func SubFn(a int, b int) int

Generated with Arrow