Commit b1d37b74 authored by Rob Pike's avatar Rob Pike

reflect.PtrValue.SetSub() to set pointers

R=rsc
OCL=19101
CL=19101
parent 2f4d35ff
......@@ -91,6 +91,17 @@ 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");
......
......@@ -39,6 +39,7 @@ export type Empty interface {} // TODO(r): Delete when no longer needed?
export type Value interface {
Kind() int;
Type() Type;
Addr() Addr;
Interface() Empty;
}
......@@ -58,6 +59,10 @@ func (c *Common) Type() Type {
return c.typ
}
func (c *Common) Addr() Addr {
return c.addr
}
func (c *Common) Interface() Empty {
return sys.unreflect(*AddrToPtrAddr(c.addr), c.typ.String());
}
......@@ -493,6 +498,7 @@ export type PtrValue interface {
Type() Type;
Sub() Value;
Get() Addr;
SetSub(Value);
}
type PtrValueStruct struct {
......@@ -507,6 +513,10 @@ func (v *PtrValueStruct) Sub() Value {
return NewValueAddr(v.typ.(PtrType).Sub(), v.Get());
}
func (v *PtrValueStruct) SetSub(subv Value) {
*AddrToPtrAddr(v.addr) = subv.Addr();
}
func PtrCreator(typ Type, addr Addr) Value {
return &PtrValueStruct{ Common{PtrKind, typ, addr} };
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment