diff options
author | Matthew Dempsky <mdempsky@google.com> | 2021-07-07 12:33:40 -0700 |
---|---|---|
committer | Matthew Dempsky <mdempsky@google.com> | 2021-07-07 22:28:19 +0000 |
commit | b003a8b1ae26fa684ec35eb7543efa1ded1bcae7 (patch) | |
tree | 660a3ae6ca58d4f50d237d6892bf2499f782e0bd | |
parent | 11f5df2d6703b3fbd61a256e4e32ba67d835e7ad (diff) | |
download | go-b003a8b1ae26fa684ec35eb7543efa1ded1bcae7.tar.gz go-b003a8b1ae26fa684ec35eb7543efa1ded1bcae7.zip |
cmd/compile: optimize types.sconv
Now that symfmt is simpler, we can simply manually inline it into
sconv. Importantly, this allows us to avoid allocating a buffer +
writing a string + re-interning it when we don't need to qualify the
identifier.
Passes toolstash -cmp.
Updates #47087.
Change-Id: I47b57aef22301ba242556a645346f478f0c1a7d1
Reviewed-on: https://go-review.googlesource.com/c/go/+/333162
Trust: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
-rw-r--r-- | src/cmd/compile/internal/types/fmt.go | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/cmd/compile/internal/types/fmt.go b/src/cmd/compile/internal/types/fmt.go index 0ce423dae7..7b284aa661 100644 --- a/src/cmd/compile/internal/types/fmt.go +++ b/src/cmd/compile/internal/types/fmt.go @@ -112,11 +112,19 @@ func sconv(s *Sym, verb rune, mode fmtMode) string { if s.Name == "_" { return "_" } + + q := pkgqual(s.Pkg, verb, mode) + if q == "" { + return s.Name + } + buf := fmtBufferPool.Get().(*bytes.Buffer) buf.Reset() defer fmtBufferPool.Put(buf) - symfmt(buf, s, verb, mode) + buf.WriteString(q) + buf.WriteByte('.') + buf.WriteString(s.Name) return InternString(buf.Bytes()) } |