github.com/amarpal/go-tools@v0.0.0-20240422043104-40142f59f616/go/types/typeutil/upstream.go (about)

     1  package typeutil
     2  
     3  import (
     4  	"go/ast"
     5  	"go/types"
     6  	_ "unsafe"
     7  
     8  	"golang.org/x/tools/go/types/typeutil"
     9  )
    10  
    11  type MethodSetCache = typeutil.MethodSetCache
    12  type Hasher = typeutil.Hasher
    13  
    14  func Callee(info *types.Info, call *ast.CallExpr) types.Object {
    15  	return typeutil.Callee(info, call)
    16  }
    17  
    18  func IntuitiveMethodSet(T types.Type, msets *MethodSetCache) []*types.Selection {
    19  	return typeutil.IntuitiveMethodSet(T, msets)
    20  }
    21  
    22  func MakeHasher() Hasher {
    23  	return typeutil.MakeHasher()
    24  }
    25  
    26  type Map[V any] struct {
    27  	m typeutil.Map
    28  }
    29  
    30  func (m *Map[V]) Delete(key types.Type) bool { return m.m.Delete(key) }
    31  func (m *Map[V]) At(key types.Type) (V, bool) {
    32  	v := m.m.At(key)
    33  	if v == nil {
    34  		var zero V
    35  		return zero, false
    36  	} else {
    37  		return v.(V), true
    38  	}
    39  }
    40  func (m *Map[V]) Set(key types.Type, value V) { m.m.Set(key, value) }
    41  func (m *Map[V]) Len() int                    { return m.m.Len() }
    42  func (m *Map[V]) Iterate(f func(key types.Type, value V)) {
    43  	ff := func(key types.Type, value interface{}) {
    44  		f(key, value.(V))
    45  	}
    46  	m.m.Iterate(ff)
    47  
    48  }
    49  func (m *Map[V]) Keys() []types.Type          { return m.m.Keys() }
    50  func (m *Map[V]) String() string              { return m.m.String() }
    51  func (m *Map[V]) KeysString() string          { return m.m.KeysString() }
    52  func (m *Map[V]) SetHasher(h typeutil.Hasher) { m.m.SetHasher(h) }