Browse Source

codec: fix maprange for all versions

Ugorji Nwoke 6 years ago
parent
commit
006754911c

+ 9 - 5
codec/goversion_maprange_lt_go112.go

@@ -23,9 +23,10 @@ func (t *mapIter) Next() (r bool) {
 			t.k.Set(t.keys[t.j])
 		}
 		if t.vOk {
-			t.v.Set(t.rv.MapIndex(t.keys[t.j]))
+			t.v.Set(t.m.MapIndex(t.keys[t.j]))
 		}
 	}
+	return
 }
 
 func (t *mapIter) Key() reflect.Value {
@@ -42,14 +43,17 @@ func (t *mapIter) Value() (r reflect.Value) {
 	if t.vOk {
 		return t.v
 	}
-	return t.rv.MapIndex(t.keys[t.j])
+	return t.m.MapIndex(t.keys[t.j])
 }
 
 func mapRange(m, k, v reflect.Value, values bool) *mapIter {
-	return &mapIter{m: m, k: k, v: v,
-		kOk: k.CanSet(), vOk: values && v.CanSet(),
-		keys: rv.MapKeys(), j: -1,
+	return &mapIter{
+		m: m, k: k, v: v,
+		kOk:    k.CanSet(),
+		vOk:    values && v.CanSet(),
+		keys:   m.MapKeys(),
 		values: values,
+		j:      -1,
 	}
 }
 

+ 15 - 0
codec/goversion_maprange_unsafe_eq_go112.go

@@ -0,0 +1,15 @@
+// Copyright (c) 2012-2018 Ugorji Nwoke. All rights reserved.
+// Use of this source code is governed by a MIT license found in the LICENSE file.
+
+// +build !safe
+// +build !appengine
+// +build go1.12
+// +build !go1.13
+
+package codec
+
+import "unsafe"
+
+//go:linkname mapiterelem reflect.mapitervalue
+//go:noescape
+func mapiterelem(it unsafe.Pointer) (elem unsafe.Pointer)

+ 0 - 4
codec/goversion_maprange_unsafe_gte_go112.go

@@ -122,10 +122,6 @@ func mapAddressableRV(t reflect.Type) (r reflect.Value) {
 //go:noescape
 func mapiterkey(it unsafe.Pointer) (key unsafe.Pointer)
 
-//go:linkname mapiterelem reflect.mapiterelem
-//go:noescape
-func mapiterelem(it unsafe.Pointer) (elem unsafe.Pointer)
-
 //go:linkname mapaccess reflect.mapaccess
 //go:noescape
 func mapaccess(rtype unsafe.Pointer, m unsafe.Pointer, key unsafe.Pointer) (val unsafe.Pointer)

+ 14 - 0
codec/goversion_maprange_unsafe_gte_go113.go

@@ -0,0 +1,14 @@
+// Copyright (c) 2012-2018 Ugorji Nwoke. All rights reserved.
+// Use of this source code is governed by a MIT license found in the LICENSE file.
+
+// +build !safe
+// +build !appengine
+// +build go1.13
+
+package codec
+
+import "unsafe"
+
+//go:linkname mapiterelem reflect.mapiterelem
+//go:noescape
+func mapiterelem(it unsafe.Pointer) (elem unsafe.Pointer)