add method Value() Value to InterfaceValue.

use Value() in print to print underlying value
from interface.

before:
	package main
	import "fmt"
	func main() {
		x := []interface{} {1, "hello", 2.5};
		fmt.Println(x[0], x[1], x[2], x);
	}

	1 hello 2.5 [<non-nil interface> <non-nil interface> <non-nil interface>]

after:
	1 hello 2.5 [1 hello 2.5]

R=r
DELTA=44  (22 added, 16 deleted, 6 changed)
OCL=27139
CL=27141
This commit is contained in:
Russ Cox 2009-04-06 21:28:04 -07:00
parent b80fdd1e3b
commit ac6ebfdea9
4 changed files with 28 additions and 22 deletions

View file

@ -34,6 +34,8 @@ type Value interface {
Interface() interface {};
}
func NewValue(e interface{}) Value;
// commonValue fields and functionality for all values
type commonValue struct {
@ -744,6 +746,7 @@ func structCreator(typ Type, addr Addr) Value {
type InterfaceValue interface {
Value;
Get() interface {}; // Get the underlying interface{} value.
Value() Value;
}
type interfaceValueStruct struct {
@ -754,6 +757,14 @@ func (v *interfaceValueStruct) Get() interface{} {
return *(*interface{})(v.addr)
}
func (v *interfaceValueStruct) Value() Value {
i := v.Get();
if i == nil {
return nil;
}
return NewValue(i);
}
func interfaceCreator(typ Type, addr Addr) Value {
return &interfaceValueStruct{ commonValue{InterfaceKind, typ, addr} }
}