)]}'
{
  "commit": "9163fa28b89222cd851c0d24bd6a1384d1379c55",
  "tree": "fc645396b89cfc098389384f971c8c60e49b45c9",
  "parents": [
    "b5c950fb98042fe434edca0c2403234692f25cd4"
  ],
  "author": {
    "name": "Ian Lance Taylor",
    "email": "iant@golang.org",
    "time": "Mon Dec 30 14:37:23 2019 -0800"
  },
  "committer": {
    "name": "Ian Lance Taylor",
    "email": "iant@golang.org",
    "time": "Thu Jan 02 21:54:11 2020 +0000"
  },
  "message": "compiler, runtime, reflect: generate hash functions only for map keys\n\nRight now we generate hash functions for all types, just in case they\nare used as map keys. That\u0027s a lot of wasted effort and binary size\nfor types which will never be used as a map key. Instead, generate\nhash functions only for types that we know are map keys.\n\nJust doing that is a bit too simple, since maps with an interface type\nas a key might have to hash any concrete key type that implements that\ninterface. So for that case, implement hashing of such types at\nruntime (instead of with generated code). It will be slower, but only\nfor maps with interface types as keys, and maybe only a bit slower as\nthe aeshash time probably dominates the dispatch time.\n\nReorg where we keep the equals and hash functions. Move the hash function\nfrom the key type to the map type, saving a field in every non-map type.\nThat leaves only one function in the alg structure, so get rid of that and\njust keep the equal function in the type descriptor itself.\n\nWhile we\u0027re here, reorganize the rtype struct to more closely match\nthe gc version.\n\nThis is the gofrontend version of https://golang.org/cl/191198.\n\nChange-Id: Ic0e34bbcb773c921a8902dedaa718af637b2561f\nReviewed-on: https://go-review.googlesource.com/c/gofrontend/+/212843\nReviewed-by: Than McIntosh \u003cthanm@google.com\u003e\nReviewed-by: Cherry Zhang \u003ccherryyz@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "db533bbd321cf4474ad6f409f482812b7a61f268",
      "old_mode": 33188,
      "old_path": "go/gogo.cc",
      "new_id": "b50d8a26f2d8dea28d79967b29b53ade645ce1a4",
      "new_mode": 33188,
      "new_path": "go/gogo.cc"
    },
    {
      "type": "modify",
      "old_id": "cd4e38f4b95c54513e28c881974f28e616c1f62d",
      "old_mode": 33188,
      "old_path": "go/gogo.h",
      "new_id": "27d7b4cf2f866d9a84b3c81003d06090d112182a",
      "new_mode": 33188,
      "new_path": "go/gogo.h"
    },
    {
      "type": "modify",
      "old_id": "959415a765527998575bb991a2c06b89929aef95",
      "old_mode": 33188,
      "old_path": "go/names.cc",
      "new_id": "f4ad181515b835ce7a8ac6bf49be5e7f22f376b1",
      "new_mode": 33188,
      "new_path": "go/names.cc"
    },
    {
      "type": "modify",
      "old_id": "1004040e04ebd2117156ff58e114876b34d244d4",
      "old_mode": 33188,
      "old_path": "go/types.cc",
      "new_id": "27d53df2c356510193a8d97f7ed77493548cbacc",
      "new_mode": 33188,
      "new_path": "go/types.cc"
    },
    {
      "type": "modify",
      "old_id": "55c5912620ceef11cc77cba8687afb8b54347381",
      "old_mode": 33188,
      "old_path": "go/types.h",
      "new_id": "ef81589682f8dcd64c3a2ddfbf106fc429b3ce54",
      "new_mode": 33188,
      "new_path": "go/types.h"
    },
    {
      "type": "modify",
      "old_id": "02b2aee03aa2025f6a9566538963fd98b640313e",
      "old_mode": 33188,
      "old_path": "libgo/go/internal/reflectlite/type.go",
      "new_id": "35cf1a4fefe457ed3f48e961695e372243cb200e",
      "new_mode": 33188,
      "new_path": "libgo/go/internal/reflectlite/type.go"
    },
    {
      "type": "modify",
      "old_id": "f82f5eb112160f7adc3d24af1b9da410518c12bb",
      "old_mode": 33188,
      "old_path": "libgo/go/reflect/type.go",
      "new_id": "41ed383fc8e233e2a16e6dd6061c496e3e762334",
      "new_mode": 33188,
      "new_path": "libgo/go/reflect/type.go"
    },
    {
      "type": "modify",
      "old_id": "c4a62c34b83b37aaa2eb66e188fd74f3fe52983f",
      "old_mode": 33188,
      "old_path": "libgo/go/reflect/value.go",
      "new_id": "15a502465f78cab1391c7763bfb0c5a41fd5b339",
      "new_mode": 33188,
      "new_path": "libgo/go/reflect/value.go"
    },
    {
      "type": "modify",
      "old_id": "f96a75d1d99f6910208697b3e20d2484341d2bf1",
      "old_mode": 33188,
      "old_path": "libgo/go/runtime/alg.go",
      "new_id": "e802fdd7024a13c0e49c5a7ac400f57f1f155bd9",
      "new_mode": 33188,
      "new_path": "libgo/go/runtime/alg.go"
    },
    {
      "type": "modify",
      "old_id": "349577b232add6ba88d6f11a98715cafc5c73d67",
      "old_mode": 33188,
      "old_path": "libgo/go/runtime/map.go",
      "new_id": "36729087ce6210184798765c2b7bbde0ce167422",
      "new_mode": 33188,
      "new_path": "libgo/go/runtime/map.go"
    },
    {
      "type": "modify",
      "old_id": "d37dadcb5694d55bfef8798459cd83cacc7c1d63",
      "old_mode": 33188,
      "old_path": "libgo/go/runtime/map_benchmark_test.go",
      "new_id": "cf04ead11561e29af86afbab80f59503b68ecedf",
      "new_mode": 33188,
      "new_path": "libgo/go/runtime/map_benchmark_test.go"
    },
    {
      "type": "modify",
      "old_id": "57b3c0f1c5084ac8582b7f1f8f961482dcc61451",
      "old_mode": 33188,
      "old_path": "libgo/go/runtime/map_fast32.go",
      "new_id": "fdc7f0ee10ae1381662530c04ee92050e5b0fd11",
      "new_mode": 33188,
      "new_path": "libgo/go/runtime/map_fast32.go"
    },
    {
      "type": "modify",
      "old_id": "af86f747f057ed94ca0a0dafc78664285c056386",
      "old_mode": 33188,
      "old_path": "libgo/go/runtime/map_fast64.go",
      "new_id": "26c60aeb0fc22412d479e1e20d61958860a002f9",
      "new_mode": 33188,
      "new_path": "libgo/go/runtime/map_fast64.go"
    },
    {
      "type": "modify",
      "old_id": "3c5175d96869480df5a5d54e96a801fee78d354d",
      "old_mode": 33188,
      "old_path": "libgo/go/runtime/map_faststr.go",
      "new_id": "1775214ff48b16ed31ce9d36aaf79e3db3a6d6d1",
      "new_mode": 33188,
      "new_path": "libgo/go/runtime/map_faststr.go"
    },
    {
      "type": "modify",
      "old_id": "bc5f738c4fad2723534124df0537df403139f009",
      "old_mode": 33188,
      "old_path": "libgo/go/runtime/map_test.go",
      "new_id": "b13d269acf572f15db6ed57a7e700319369046de",
      "new_mode": 33188,
      "new_path": "libgo/go/runtime/map_test.go"
    },
    {
      "type": "modify",
      "old_id": "63ad310355d6fddae01f168c007b21d18fe8ed3c",
      "old_mode": 33188,
      "old_path": "libgo/go/runtime/type.go",
      "new_id": "94abbb8e9f89cf8d07b2afd8b64b3254248d0987",
      "new_mode": 33188,
      "new_path": "libgo/go/runtime/type.go"
    },
    {
      "type": "modify",
      "old_id": "d987acab637d2b437e4dcb6afb05eecb25ad73aa",
      "old_mode": 33188,
      "old_path": "libgo/runtime/go-unsafe-pointer.c",
      "new_id": "364878ebcfee923594887474d73bbe36927e3db6",
      "new_mode": 33188,
      "new_path": "libgo/runtime/go-unsafe-pointer.c"
    }
  ]
}
