The hash_next_and_deref was a dreg from a
previous large value scheme.
Fixes #1163.
R=r, r2
CC=golang-dev
https://golang.org/cl/
2369043
}
}
-void*
-hash_next_and_deref(struct hash_iter *it)
-{
- void *p;
-
- p = hash_next(it);
- if(it->h->indirectval)
- p = *(void**)p;
- return p;
-}
-
// mapiterinit(hmap *map[any]any, hiter *any);
void
·mapiterinit(Hmap *h, struct hash_iter *it)
return;
}
hash_iter_init(h, it);
- it->data = hash_next_and_deref(it);
+ it->data = hash_next(it);
if(debug) {
prints("runtime.mapiterinit: map=");
·printpointer(h);
if(gcwaiting)
gosched();
- it->data = hash_next_and_deref(it);
+ it->data = hash_next(it);
if(debug) {
prints("runtime.mapiternext: iter=");
·printpointer(it);
--- /dev/null
+// $G $D/$F.go && $L $F.$A && ./$A.out
+
+// Copyright 2010 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+func main() {
+ m := make(map[string][1000]byte)
+ m["hi"] = [1000]byte{1}
+
+ v := m["hi"]
+
+ for k, vv := range m {
+ if k != "hi" || string(v[:]) != string(vv[:]) {
+ panic("bad iter")
+ }
+ }
+}