]> Cypherpunks repositories - gostls13.git/commitdiff
reflect: add InterfaceValue.Get to enable setting of an interface
authorRob Pike <r@golang.org>
Wed, 20 Oct 2010 04:25:28 +0000 (21:25 -0700)
committerRob Pike <r@golang.org>
Wed, 20 Oct 2010 04:25:28 +0000 (21:25 -0700)
value (through unsafe means) without having a reflect.Type
of type *interface{} (pointer to interface).  This is needed to make
gob able to handle interface values by a method analogous to
the way it handles maps.

R=rsc
CC=golang-dev
https://golang.org/cl/2597041

src/pkg/reflect/value.go

index dd677b4ea8150f111fb55858ca14335bf21c1ba8..60e0d90deb37e10efa13a23fc65affcfe46c8cc7 100644 (file)
@@ -843,11 +843,17 @@ type InterfaceValue struct {
        value "interface"
 }
 
-// No Get because v.Interface() is available.
-
 // IsNil returns whether v is a nil interface value.
 func (v *InterfaceValue) IsNil() bool { return v.Interface() == nil }
 
+// No single uinptr Get because v.Interface() is available.
+
+// Get returns the two words that represent an interface in the runtime.
+// Those words are useful only when playing unsafe games.
+func (v *InterfaceValue) Get() [2]uintptr {
+       return *(*[2]uintptr)(v.addr)
+}
+
 // Elem returns the concrete value stored in the interface value v.
 func (v *InterfaceValue) Elem() Value { return NewValue(v.Interface()) }