aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Dempsky <mdempsky@google.com>2021-07-07 12:33:40 -0700
committerMatthew Dempsky <mdempsky@google.com>2021-07-07 22:28:19 +0000
commitb003a8b1ae26fa684ec35eb7543efa1ded1bcae7 (patch)
tree660a3ae6ca58d4f50d237d6892bf2499f782e0bd
parent11f5df2d6703b3fbd61a256e4e32ba67d835e7ad (diff)
downloadgo-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.go10
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())
}