aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Gerrand <adg@golang.org>2013-11-01 11:00:12 +1100
committerAndrew Gerrand <adg@golang.org>2013-11-01 11:00:12 +1100
commitc57029d43d7df433cf856ad241ce9f5095b5bec9 (patch)
tree5e4be325b0f3114229f0cb767f85a765dc5a4b25
parent287fa600ed86c052f356eba4d2f5e537a45ca370 (diff)
downloadgo-c57029d43d7df433cf856ad241ce9f5095b5bec9.tar.gz
go-c57029d43d7df433cf856ad241ce9f5095b5bec9.zip
[release-branch.go1.2] cmd/gc: shorten name used for map bucket type
««« CL 15110044 / 95336afd420c cmd/gc: shorten name used for map bucket type Before: type.struct { buckets *struct { overflow *struct { overflow *struct { overflow *struct { overflow *struct { overflow *<...>; keys [8]string; values [8]*"".RangeTable }; keys [8]string; values [8]*"".RangeTable }; keys [8]string; values [8]*"".RangeTable }; keys [8]string; values [8]*"".RangeTable }; keys [8]string; values [8]*"".RangeTable }; oldbuckets *struct { overflow *struct { overflow *struct { overflow *struct { overflow *struct { overflow *<...>; keys [8]string; values [8]*"".RangeTable }; keys [8]string; values [8]*"".RangeTable }; keys [8]string; values [8]*"".RangeTable }; keys [8]string; values [8]*"".RangeTable }; keys [8]string; values [8]*"".RangeTable } } After: type.map.bucket[string]*"".RangeTable This makes debugging maps a little nicer, and it takes up less space in the binary. R=golang-dev, r CC=golang-dev, khr https://golang.org/cl/15110044 »»» R=golang-dev CC=golang-dev https://golang.org/cl/20050044
-rw-r--r--src/cmd/gc/fmt.c7
-rw-r--r--src/cmd/gc/reflect.c1
2 files changed, 8 insertions, 0 deletions
diff --git a/src/cmd/gc/fmt.c b/src/cmd/gc/fmt.c
index c525a56cbe..9cd3448701 100644
--- a/src/cmd/gc/fmt.c
+++ b/src/cmd/gc/fmt.c
@@ -700,6 +700,13 @@ typefmt(Fmt *fp, Type *t)
return 0;
case TSTRUCT:
+ // Format the bucket struct for map[x]y as map.bucket[x]y.
+ // This avoids a recursive print that generates very long names.
+ if(t->hmap != T) {
+ t = t->hmap;
+ return fmtprint(fp, "map.bucket[%T]%T", t->down, t->type);
+ }
+
if(t->funarg) {
fmtstrcpy(fp, "(");
if(fmtmode == FTypeId || fmtmode == FErr) { // no argument names on function signature, and no "noescape" tags
diff --git a/src/cmd/gc/reflect.c b/src/cmd/gc/reflect.c
index ea66eb94b2..0a8aa8d7a6 100644
--- a/src/cmd/gc/reflect.c
+++ b/src/cmd/gc/reflect.c
@@ -229,6 +229,7 @@ hmap(Type *t)
h->width = offset;
h->local = t->local;
t->hmap = h;
+ h->hmap = t;
return h;
}