From 419e1e05a1ad418c4f5526dee993e300f7551f46 Mon Sep 17 00:00:00 2001 From: Rob Pike Date: Wed, 12 Nov 2008 19:05:05 -0800 Subject: [PATCH] add some support for modifying what pointers point to R=rsc DELTA=27 (16 added, 11 deleted, 0 changed) OCL=19130 CL=19132 --- src/lib/reflect/test.go | 22 +++++++++++----------- 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 7088094383..7b97608dca 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 bace93b6d1..1877d1015a 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(); } -- 2.48.1