Skip to content

Commit 58ec10c

Browse files
committed
go/ssa/interp: handle nil *hashmap cleanly
Change-Id: I2cb8eef79bc011b209b3df0b859bcddefd4c8337 Reviewed-on: https://go-review.googlesource.com/32818 Reviewed-by: Robert Griesemer <[email protected]>
1 parent 2e34863 commit 58ec10c

File tree

4 files changed

+12
-4
lines changed

4 files changed

+12
-4
lines changed

go/ssa/interp/map.go

+8
Original file line numberDiff line numberDiff line change
@@ -113,3 +113,11 @@ func (m *hashmap) len() int {
113113
}
114114
return 0
115115
}
116+
117+
// entries returns a rangeable map of entries.
118+
func (m *hashmap) entries() map[int]*entry {
119+
if m != nil {
120+
return m.table
121+
}
122+
return nil
123+
}

go/ssa/interp/ops.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1098,7 +1098,7 @@ func rangeIter(x value, t types.Type) iter {
10981098
// reflect.(Value).MapKeys machinery.
10991099
it := make(mapIter)
11001100
go func() {
1101-
for _, e := range x.table {
1101+
for _, e := range x.entries() {
11021102
for e != nil {
11031103
it <- [2]value{e.key, e.value}
11041104
e = e.next

go/ssa/interp/reflect.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ func ext۰reflect۰Value۰MapKeys(fr *frame, args []value) value {
333333
}
334334

335335
case *hashmap:
336-
for _, e := range v.table {
336+
for _, e := range v.entries() {
337337
for ; e != nil; e = e.next {
338338
keys = append(keys, makeReflectValue(tKey, e.key))
339339
}
@@ -365,7 +365,7 @@ func ext۰reflect۰Value۰Pointer(fr *frame, args []value) value {
365365
case []value:
366366
return reflect.ValueOf(v).Pointer()
367367
case *hashmap:
368-
return reflect.ValueOf(v.table).Pointer()
368+
return reflect.ValueOf(v.entries()).Pointer()
369369
case map[value]value:
370370
return reflect.ValueOf(v).Pointer()
371371
case *ssa.Function:

go/ssa/interp/value.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ func writeValue(buf *bytes.Buffer, v value) {
384384
case *hashmap:
385385
buf.WriteString("map[")
386386
sep := " "
387-
for _, e := range v.table {
387+
for _, e := range v.entries() {
388388
for e != nil {
389389
buf.WriteString(sep)
390390
sep = " "

0 commit comments

Comments
 (0)