(Argument: For any *PtrValue p, it should
always be possible to do: p.PointTo(p.Elem()),
even if p.Elem() is nil.)
Fixes #1028.
R=rsc
CC=golang-dev, r
https://golang.org/cl/
1938044
if *ip != 1234 {
t.Errorf("got %d, want 1234", *ip)
}
+
+ ip = nil
+ vp := NewValue(ip).(*PtrValue)
+ vp.PointTo(vp.Elem())
+ if ip != nil {
+ t.Errorf("got non-nil (%p), want nil", ip)
+ }
}
func TestPtrSetNil(t *testing.T) {
}
// PointTo changes v to point to x.
+// If x is a nil Value, PointTo sets v to nil.
func (v *PtrValue) PointTo(x Value) {
+ if x == nil {
+ *(**uintptr)(v.addr) = nil
+ return
+ }
if !x.CanSet() {
panic("cannot set x; cannot point to x")
}