mirror of
https://github.com/golang/go
synced 2024-11-12 10:30:23 -07:00
cmd/gc: don't generate algs for internal map types.
Fake types describing the internal structure of hashmaps are generated for use by precise GC. Generating hash and eq functions for these fake types slows down the build and wastes space: the go tool binary size is 13MB instead of 12MB, and the package size on amd64 is 48.7MB instead of 45.3MB. R=golang-dev, daniel.morsing, r, khr, rsc, iant CC=golang-dev https://golang.org/cl/13698043
This commit is contained in:
parent
22e8f82e8d
commit
04c40c97c3
@ -141,6 +141,7 @@ struct Type
|
||||
{
|
||||
uchar etype;
|
||||
uchar nointerface;
|
||||
uchar noalg;
|
||||
uchar chan;
|
||||
uchar trecur; // to detect loops
|
||||
uchar printed;
|
||||
|
@ -131,6 +131,7 @@ mapbucket(Type *t)
|
||||
valtype = ptrto(valtype);
|
||||
|
||||
bucket = typ(TSTRUCT);
|
||||
bucket->noalg = 1;
|
||||
|
||||
// The first field is: uint8 topbits[BUCKETSIZE].
|
||||
// We don't need to encode it as GC doesn't care about it.
|
||||
@ -192,6 +193,7 @@ hmap(Type *t)
|
||||
|
||||
bucket = mapbucket(t);
|
||||
h = typ(TSTRUCT);
|
||||
h->noalg = 1;
|
||||
|
||||
offset = widthint; // count
|
||||
offset += 4; // flags
|
||||
|
@ -547,6 +547,9 @@ algtype1(Type *t, Type **bad)
|
||||
if(bad)
|
||||
*bad = T;
|
||||
|
||||
if(t->noalg)
|
||||
return ANOEQ;
|
||||
|
||||
switch(t->etype) {
|
||||
case TANY:
|
||||
case TFORW:
|
||||
|
Loading…
Reference in New Issue
Block a user