code: func (b *builder) expr(fn *Function, e ast.Expr) Value {
  	e = unparen(e)
  
  	tv := fn.Pkg.info.Types[e]
  
  	// Is expression a constant?
  	if tv.Value != nil {
  		return NewConst(tv.Value, tv.Type)
  	}
  
  	var v Value
  	if tv.Addressable() {
  		// Prefer pointer arithmetic ({Index,Field}Addr) followed
  		// by Load over subelement extraction (e.g. Index, Field),
  		// to avoid large copies.
  		v = b.addr(fn, e, false).load(fn)
  	} else {
  		v = b.expr0(fn, e, tv)
  	}
  	if fn.debugInfo() {
  		emitDebugRef(fn, e, v, false)
  	}
  	return v
  }
docs: // expr lowers a single-result expression e to SSA form, emitting code
  // to fn and returning the Value defined by the expression.
  //