_linters/src/honnef.co/go/tools/ssa/builder.go
func (b *builder) receiver(fn *Function, e ast.Expr, wantAddr, escaping bool, sel *types.Selection) Value {
	var v Value
	if wantAddr && !sel.Indirect() && !isPointer(fn.Pkg.typeOf(e)) {
		v = b.addr(fn, e, escaping).address(fn)
	} else {
		v = b.expr(fn, e)
	}

	last := len(sel.Index()) - 1
	v = emitImplicitSelections(fn, v, sel.Index()[:last])
	if !wantAddr && isPointer(v.Type()) {
		v = emitLoad(fn, v)
	}
	return v
}
func (b *builder) receiver(fn *Function, e ast.Expr, wantAddr, escaping bool, sel *types.Selection) Value {
	var v Value
	if wantAddr && !sel.Indirect() && !isPointer(fn.Pkg.typeOf(e)) {
		v = b.addr(fn, e, escaping).address(fn)
	} else {
		v = b.expr(fn, e)
	}

	last := len(sel.Index()) - 1
	v = emitImplicitSelections(fn, v, sel.Index()[:last])
	if !wantAddr && isPointer(v.Type()) {
		v = emitLoad(fn, v)
	}
	return v
}
func ( b * builder ) receiver ( fn * Function , e ast . Expr , wantAddr , escaping bool , sel * types . Selection ) Value { var v Value if wantAddr && ! sel . Indirect ( ) && ! isPointer ( fn . Pkg . typeOf ( e ) ) { v = b . addr ( fn , e , escaping ) . address ( fn ) } else { v = b . expr ( fn , e ) } last := len ( sel . Index ( ) ) - 1 v = emitImplicitSelections ( fn , v , sel . Index ( ) [ : last ] ) if ! wantAddr && isPointer ( v . Type ( ) ) { v = emitLoad ( fn , v ) } return v }
// receiver emits to fn code for expression e in the "receiver"
// position of selection e.f (where f may be a field or a method) and
// returns the effective receiver after applying the implicit field
// selections of sel.
//
// wantAddr requests that the result is an an address.  If
// !sel.Indirect(), this may require that e be built in addr() mode; it
// must thus be addressable.
//
// escaping is defined as per builder.addr().
//
receiver emits to fn code for expression e in the receiver position of selection e . f ( where f may be a field or a method ) and returns the effective receiver after applying the implicit field selections of sel . wantAddr requests that the result is an an address . If !sel . Indirect () this may require that e be built in addr () mode ; it must thus be addressable . escaping is defined as per builder . addr () .