diff options
author | Russ Cox <rsc@golang.org> | 2014-10-15 14:24:18 -0400 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2014-10-15 14:24:18 -0400 |
commit | 4dace57a215037f6a66d37e0480d8e071f19ff91 (patch) | |
tree | 1ceff209087afcba058b00eeeae0673b52edd0e3 /src/reflect/type.go | |
parent | 975a1633cf3a40984fd5a7c924eed78f91f36c52 (diff) | |
download | go-4dace57a215037f6a66d37e0480d8e071f19ff91.tar.gz |
reflect: shorten value to 3 words
scalar is no longer needed, now that
interfaces always hold pointers.
Comparing best of 5 with TurboBoost turned off,
on a 2012 Retina MacBook Pro Core i5.
Still not completely confident in these numbers,
but the gob and template improvements seem real.
benchmark old ns/op new ns/op delta
BenchmarkBinaryTree17 3819892491 3803008185 -0.44%
BenchmarkFannkuch11 3623876405 3611776426 -0.33%
BenchmarkFmtFprintfEmpty 119 118 -0.84%
BenchmarkFmtFprintfString 294 292 -0.68%
BenchmarkFmtFprintfInt 310 304 -1.94%
BenchmarkFmtFprintfIntInt 513 507 -1.17%
BenchmarkFmtFprintfPrefixedInt 427 426 -0.23%
BenchmarkFmtFprintfFloat 562 554 -1.42%
BenchmarkFmtManyArgs 1873 1832 -2.19%
BenchmarkGobDecode 15824504 14746565 -6.81%
BenchmarkGobEncode 14347378 14208743 -0.97%
BenchmarkGzip 537229271 537973492 +0.14%
BenchmarkGunzip 134996775 135406149 +0.30%
BenchmarkHTTPClientServer 119065 116937 -1.79%
BenchmarkJSONEncode 29134359 28928099 -0.71%
BenchmarkJSONDecode 106867289 105770161 -1.03%
BenchmarkMandelbrot200 5798475 5791433 -0.12%
BenchmarkGoParse 5299169 5379201 +1.51%
BenchmarkRegexpMatchEasy0_32 195 195 +0.00%
BenchmarkRegexpMatchEasy0_1K 477 477 +0.00%
BenchmarkRegexpMatchEasy1_32 170 170 +0.00%
BenchmarkRegexpMatchEasy1_1K 1412 1397 -1.06%
BenchmarkRegexpMatchMedium_32 336 337 +0.30%
BenchmarkRegexpMatchMedium_1K 109025 108977 -0.04%
BenchmarkRegexpMatchHard_32 5854 5856 +0.03%
BenchmarkRegexpMatchHard_1K 184914 184748 -0.09%
BenchmarkRevcomp 829233526 836598734 +0.89%
BenchmarkTemplate 142055312 137016166 -3.55%
BenchmarkTimeParse 598 597 -0.17%
BenchmarkTimeFormat 564 568 +0.71%
Fixes issue 7425.
LGTM=r
R=golang-codereviews, r
CC=golang-codereviews, iant, khr
https://codereview.appspot.com/158890043
Diffstat (limited to 'src/reflect/type.go')
-rw-r--r-- | src/reflect/type.go | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/reflect/type.go b/src/reflect/type.go index 821b60412..b92d524c3 100644 --- a/src/reflect/type.go +++ b/src/reflect/type.go @@ -498,7 +498,7 @@ func (t *uncommonType) Method(i int) (m Method) { mt := p.typ m.Type = mt fn := unsafe.Pointer(&p.tfn) - m.Func = Value{mt, fn, 0, fl} + m.Func = Value{mt, fn, fl} m.Index = i return } @@ -1805,7 +1805,7 @@ func funcLayout(t *rtype, rcvr *rtype) (frametype *rtype, argSize, retOffset uin // Reflect uses the "interface" calling convention for // methods, where receivers take one word of argument // space no matter how big they actually are. - if !isDirectIface(rcvr) { + if ifaceIndir(rcvr) { // we pass a pointer to the receiver. gc.append(bitsPointer) stack.append2(bitsPointer) @@ -1862,9 +1862,9 @@ func funcLayout(t *rtype, rcvr *rtype) (frametype *rtype, argSize, retOffset uin return x, argSize, retOffset, stack } -// isDirectIface reports whether t is stored directly in an interface value. -func isDirectIface(t *rtype) bool { - return t.kind&kindDirectIface != 0 +// ifaceIndir reports whether t is stored indirectly in an interface value. +func ifaceIndir(t *rtype) bool { + return t.kind&kindDirectIface == 0 } // Layout matches runtime.BitVector (well enough). |