cmd/compile, etc: use tflag to optimize Name()==""

Improves JSON decoding benchmark:

	name                  old time/op    new time/op    delta
	CodeDecoder-8           41.3ms ± 6%    39.8ms ± 1%  -3.61%  (p=0.000 n=10+10)

	name                  old speed      new speed      delta
	CodeDecoder-8         47.0MB/s ± 6%  48.7MB/s ± 1%  +3.66%  (p=0.000 n=10+10)

Change-Id: I524ee05c432fad5252e79b29222ec635c1dee4b4
Reviewed-on: https://go-review.googlesource.com/24452
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
David Crawshaw 2016-06-24 15:28:58 -04:00
parent 2834526fd9
commit 797dc58457
3 changed files with 13 additions and 48 deletions

View file

@ -19,6 +19,7 @@ type tflag uint8
const (
tflagUncommon tflag = 1 << 0
tflagExtraStar tflag = 1 << 1
tflagNamed tflag = 1 << 2
)
// Needs to be in sync with ../cmd/compile/internal/ld/decodesym.go:/^func.commonsize,
@ -116,29 +117,10 @@ func hasPrefix(s, prefix string) bool {
}
func (t *_type) name() string {
if t.tflag&tflagNamed == 0 {
return ""
}
s := t.string()
if hasPrefix(s, "map[") {
return ""
}
if hasPrefix(s, "struct {") {
return ""
}
if hasPrefix(s, "chan ") {
return ""
}
if hasPrefix(s, "chan<-") {
return ""
}
if hasPrefix(s, "func(") {
return ""
}
if hasPrefix(s, "interface {") {
return ""
}
switch s[0] {
case '[', '*', '<':
return ""
}
i := len(s) - 1
for i >= 0 {
if s[i] == '.' {