@@ -1651,30 +1651,30 @@ func (iter *MapIter) Key() Value {
1651
1651
return copyVal (ktype , iter .m .flag .ro ()| flag (ktype .Kind ()), iterkey )
1652
1652
}
1653
1653
1654
- // SetKey assigns dst to the key of iter's current map entry.
1655
- // It is equivalent to dst .Set(i .Key()), but it avoids allocating a new Value.
1656
- // As in Go, the key must be assignable to dst 's type.
1657
- func (iter * MapIter ) SetKey ( dst Value ) {
1654
+ // SetIterKey assigns to v the key of iter's current map entry.
1655
+ // It is equivalent to v .Set(iter .Key()), but it avoids allocating a new Value.
1656
+ // As in Go, the key must be assignable to v 's type.
1657
+ func (v Value ) SetIterKey ( iter * MapIter ) {
1658
1658
if ! iter .hiter .initialized () {
1659
- panic ("MapIter.SetKey called before Next" )
1659
+ panic ("reflect: Value.SetIterKey called before Next" )
1660
1660
}
1661
1661
iterkey := mapiterkey (& iter .hiter )
1662
1662
if iterkey == nil {
1663
- panic ("MapIter.SetKey called on exhausted iterator" )
1663
+ panic ("reflect: Value.SetIterKey called on exhausted iterator" )
1664
1664
}
1665
1665
1666
- dst .mustBeAssignable ()
1666
+ v .mustBeAssignable ()
1667
1667
var target unsafe.Pointer
1668
- if dst .kind () == Interface {
1669
- target = dst .ptr
1668
+ if v .kind () == Interface {
1669
+ target = v .ptr
1670
1670
}
1671
1671
1672
1672
t := (* mapType )(unsafe .Pointer (iter .m .typ ))
1673
1673
ktype := t .key
1674
1674
1675
- key := Value {ktype , iterkey , iter .m .flag | flag (ktype .Kind ())}
1676
- key = key .assignTo ("reflect.MapIter.SetKey" , dst .typ , target )
1677
- typedmemmove (dst .typ , dst .ptr , key .ptr )
1675
+ key := Value {ktype , iterkey , iter .m .flag | flag (ktype .Kind ()) | flagIndir }
1676
+ key = key .assignTo ("reflect.MapIter.SetKey" , v .typ , target )
1677
+ typedmemmove (v .typ , v .ptr , key .ptr )
1678
1678
}
1679
1679
1680
1680
// Value returns the value of iter's current map entry.
@@ -1692,30 +1692,30 @@ func (iter *MapIter) Value() Value {
1692
1692
return copyVal (vtype , iter .m .flag .ro ()| flag (vtype .Kind ()), iterelem )
1693
1693
}
1694
1694
1695
- // SetValue assigns dst to the value of iter's current map entry.
1696
- // It is equivalent to dst .Set(i .Value()), but it avoids allocating a new Value.
1697
- // As in Go, the value must be assignable to dst 's type.
1698
- func (iter * MapIter ) SetValue ( dst Value ) {
1695
+ // SetIterValue assigns to v the value of iter's current map entry.
1696
+ // It is equivalent to v .Set(iter .Value()), but it avoids allocating a new Value.
1697
+ // As in Go, the value must be assignable to v 's type.
1698
+ func (v Value ) SetIterValue ( iter * MapIter ) {
1699
1699
if ! iter .hiter .initialized () {
1700
- panic ("MapIter.SetValue called before Next" )
1700
+ panic ("reflect: Value.SetIterValue called before Next" )
1701
1701
}
1702
1702
iterelem := mapiterelem (& iter .hiter )
1703
1703
if iterelem == nil {
1704
- panic ("MapIter.SetValue called on exhausted iterator" )
1704
+ panic ("reflect: Value.SetIterValue called on exhausted iterator" )
1705
1705
}
1706
1706
1707
- dst .mustBeAssignable ()
1707
+ v .mustBeAssignable ()
1708
1708
var target unsafe.Pointer
1709
- if dst .kind () == Interface {
1710
- target = dst .ptr
1709
+ if v .kind () == Interface {
1710
+ target = v .ptr
1711
1711
}
1712
1712
1713
1713
t := (* mapType )(unsafe .Pointer (iter .m .typ ))
1714
1714
vtype := t .elem
1715
1715
1716
- elem := Value {vtype , iterelem , iter .m .flag | flag (vtype .Kind ())}
1717
- elem = elem .assignTo ("reflect.MapIter.SetValue" , dst .typ , target )
1718
- typedmemmove (dst .typ , dst .ptr , elem .ptr )
1716
+ elem := Value {vtype , iterelem , iter .m .flag | flag (vtype .Kind ()) | flagIndir }
1717
+ elem = elem .assignTo ("reflect.MapIter.SetValue" , v .typ , target )
1718
+ typedmemmove (v .typ , v .ptr , elem .ptr )
1719
1719
}
1720
1720
1721
1721
// Next advances the map iterator and reports whether there is another
0 commit comments