mirror of
https://github.com/golang/go.git
synced 2025-05-31 04:02:58 +00:00
reflect: make Value.Type inlineable
This allows the result of Type to be computed much faster. Performance: old new delta 1.76ns 0.66ns -62.27% Change-Id: Ie007fd175aaa41b2f67c71fa2a34ab8d292dd0e0 Reviewed-on: https://go-review.googlesource.com/c/go/+/400335 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> Reviewed-by: Daniel Martí <mvdan@mvdan.cc> Reviewed-by: Ian Lance Taylor <iant@google.com> Run-TryBot: Ian Lance Taylor <iant@google.com> Auto-Submit: Ian Lance Taylor <iant@google.com>
This commit is contained in:
parent
5e4543c29f
commit
e948c3394e
@ -2465,12 +2465,17 @@ func (v Value) TrySend(x Value) bool {
|
||||
|
||||
// Type returns v's type.
|
||||
func (v Value) Type() Type {
|
||||
f := v.flag
|
||||
if f == 0 {
|
||||
if v.flag != 0 && v.flag&flagMethod == 0 {
|
||||
return v.typ
|
||||
}
|
||||
return v.typeSlow()
|
||||
}
|
||||
|
||||
func (v Value) typeSlow() Type {
|
||||
if v.flag == 0 {
|
||||
panic(&ValueError{"reflect.Value.Type", Invalid})
|
||||
}
|
||||
if f&flagMethod == 0 {
|
||||
// Easy case
|
||||
if v.flag&flagMethod == 0 {
|
||||
return v.typ
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user