Also fix the reflect bug that was exposed by this bug.
R=r
APPROVED=rsc
DELTA=162 (103 added, 32 deleted, 27 changed)
OCL=30125
CL=30319
t.Errorf("Set(234) changed i to %d", i.(int));
}
}
+
+func TestNilPtrValueSub(t *testing.T) {
+ var pi *int;
+ if pv := NewValue(pi).(PtrValue); pv.Sub() != nil {
+ t.Error("NewValue((*int)(nil)).(PtrValue).Sub() != nil");
+ }
+}
// comparisons that have already been seen, which allows short circuiting on
// recursive types.
func deepValueEqual(v1, v2 Value, visited map[Addr]Addr) bool {
+ if v1 == nil {
+ return v2 == nil
+ }
+ if v2 == nil {
+ return false
+ }
if v1.Kind() != v2.Kind() {
return false;
}
return *(*Addr)(v.addr)
}
+func (v *ptrValueStruct) IsNil() bool {
+ return uintptr(*(*Addr)(v.addr)) == 0
+}
+
func (v *ptrValueStruct) Sub() Value {
+ if v.IsNil() {
+ return nil
+ }
return newValueAddr(v.typ.(PtrType).Sub(), v.Get());
}
*(*Addr)(v.addr) = subv.Addr();
}
-func (v *ptrValueStruct) IsNil() bool {
- return uintptr(*(*Addr)(v.addr)) == 0
-}
-
func ptrCreator(typ Type, addr Addr) Value {
return &ptrValueStruct{ commonValue{PtrKind, typ, addr} };
}