diff options
author | Cuong Manh Le <cuong.manhle.vn@gmail.com> | 2021-08-19 17:01:26 +0700 |
---|---|---|
committer | Cuong Manh Le <cuong.manhle.vn@gmail.com> | 2021-08-20 16:23:47 +0000 |
commit | 303446395d8bfdd05da8c69f1f3f862e7e7a35db (patch) | |
tree | abf44b38711261cabba22c529e2e3260ac39e975 /src/cmd/compile/internal/reflectdata/reflect.go | |
parent | e9e0d1ef704c4bba3927522be86937164a61100c (diff) | |
download | go-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.go | 18 |
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. |