aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/reflectdata/reflect.go
diff options
context:
space:
mode:
authorCuong Manh Le <cuong.manhle.vn@gmail.com>2021-08-19 17:01:26 +0700
committerCuong Manh Le <cuong.manhle.vn@gmail.com>2021-08-20 16:23:47 +0000
commit303446395d8bfdd05da8c69f1f3f862e7e7a35db (patch)
treeabf44b38711261cabba22c529e2e3260ac39e975 /src/cmd/compile/internal/reflectdata/reflect.go
parente9e0d1ef704c4bba3927522be86937164a61100c (diff)
downloadgo-303446395d8bfdd05da8c69f1f3f862e7e7a35db.tar.gz
go-303446395d8bfdd05da8c69f1f3f862e7e7a35db.zip
cmd/compile: use typeAndStr directly in signatslice
Currently, we store *types.Type in signatslice, then convert it to typeAndStr during write runtime type process. Instead, we can just store typeAndStr directly in signatslice when adding type to signatset. Not a big win, but simplify the code a bit. Change-Id: Ie1c8cfa5141da32b6ec3ce5844ba150d2765fe90 Reviewed-on: https://go-review.googlesource.com/c/go/+/343529 Trust: Cuong Manh Le <cuong.manhle.vn@gmail.com> Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org>
Diffstat (limited to 'src/cmd/compile/internal/reflectdata/reflect.go')
-rw-r--r--src/cmd/compile/internal/reflectdata/reflect.go18
1 files changed, 7 insertions, 11 deletions
diff --git a/src/cmd/compile/internal/reflectdata/reflect.go b/src/cmd/compile/internal/reflectdata/reflect.go
index 3db6585894..3ba8f52541 100644
--- a/src/cmd/compile/internal/reflectdata/reflect.go
+++ b/src/cmd/compile/internal/reflectdata/reflect.go
@@ -44,7 +44,7 @@ var (
// Tracking which types need runtime type descriptor
signatset = make(map[*types.Type]struct{})
// Queue of types wait to be generated runtime type descriptor
- signatslice []*types.Type
+ signatslice []typeAndStr
gcsymmu sync.Mutex // protects gcsymset and gcsymslice
gcsymset = make(map[*types.Type]struct{})
@@ -1238,21 +1238,16 @@ func NeedRuntimeType(t *types.Type) {
}
if _, ok := signatset[t]; !ok {
signatset[t] = struct{}{}
- signatslice = append(signatslice, t)
+ signatslice = append(signatslice, typeAndStr{t: t, short: types.TypeSymName(t), regular: t.String()})
}
}
func WriteRuntimeTypes() {
- // Process signatset. Use a loop, as writeType adds
- // entries to signatset while it is being processed.
- signats := make([]typeAndStr, len(signatslice))
+ // Process signatslice. Use a loop, as writeType adds
+ // entries to signatslice while it is being processed.
for len(signatslice) > 0 {
- signats = signats[:0]
- // Transfer entries to a slice and sort, for reproducible builds.
- for _, t := range signatslice {
- signats = append(signats, typeAndStr{t: t, short: types.TypeSymName(t), regular: t.String()})
- }
- signatslice = signatslice[:0]
+ signats := signatslice
+ // Sort for reproducible builds.
sort.Sort(typesByString(signats))
for _, ts := range signats {
t := ts.t
@@ -1261,6 +1256,7 @@ func WriteRuntimeTypes() {
writeType(types.NewPtr(t))
}
}
+ signatslice = signatslice[len(signats):]
}
// Emit GC data symbols.