diff options
author | Rob Pike <r@golang.org> | 2008-11-12 19:05:05 -0800 |
---|---|---|
committer | Rob Pike <r@golang.org> | 2008-11-12 19:05:05 -0800 |
commit | c95d659f808741a2ae318f053df052a9e8e0a663 (patch) | |
tree | 8c32b8ee9e231de5032d302f986e29c3b3d48014 | |
parent | 16dec16c6a5f28a8599780d2b6aeb20b7c6e6c69 (diff) | |
download | golang-c95d659f808741a2ae318f053df052a9e8e0a663.tar.gz |
add some support for modifying what pointers point to
R=rsc
DELTA=27 (16 added, 11 deleted, 0 changed)
OCL=19130
CL=19132
-rw-r--r-- | src/lib/reflect/test.go | 22 | ||||
-rw-r--r-- | src/lib/reflect/value.go | 5 |
2 files changed, 16 insertions, 11 deletions
diff --git a/src/lib/reflect/test.go b/src/lib/reflect/test.go index 708809438..7b97608dc 100644 --- a/src/lib/reflect/test.go +++ b/src/lib/reflect/test.go @@ -91,17 +91,6 @@ func main() { var s string; var t reflect.Type; -{ - var ip *int32; - var i int32 = 1234; - vip := reflect.NewValue(&ip); - vi := reflect.NewValue(i); - vip.(reflect.PtrValue).Sub().(reflect.PtrValue).SetSub(vi); - if *ip != 1234 { - panicln("SetSub failure", *ip); - } -} - // Types typedump("missing", "$missing$"); typedump("int", "int"); @@ -205,6 +194,17 @@ func main() { assert(reflect.ValueToString(value.(reflect.PtrValue).Sub()), "main.AA·test{1, 2, 3, 4, 123, 6, 7, 8, 9, 10}"); } + { + var ip *int32; + var i int32 = 1234; + vip := reflect.NewValue(&ip); + vi := reflect.NewValue(i); + vip.(reflect.PtrValue).Sub().(reflect.PtrValue).SetSub(vi); + if *ip != 1234 { + panicln("SetSub failure", *ip); + } + } + var pt reflect.PtrType; var st reflect.StructType; var mt reflect.MapType; diff --git a/src/lib/reflect/value.go b/src/lib/reflect/value.go index bace93b6d..1877d1015 100644 --- a/src/lib/reflect/value.go +++ b/src/lib/reflect/value.go @@ -514,6 +514,11 @@ func (v *PtrValueStruct) Sub() Value { } func (v *PtrValueStruct) SetSub(subv Value) { + a := v.typ.(PtrType).Sub().String(); + b := subv.Type().String(); + if a != b { + panicln("reflect: incompatible types in PtrValue.SetSub:", a, b); + } *AddrToPtrAddr(v.addr) = subv.Addr(); } |