document reflect.

R=rsc
DELTA=201  (90 added, 0 deleted, 111 changed)
OCL=25904
CL=25966
diff --git a/src/lib/reflect/value.go b/src/lib/reflect/value.go
index 9056d74..f4e6340 100644
--- a/src/lib/reflect/value.go
+++ b/src/lib/reflect/value.go
@@ -12,16 +12,25 @@
 	"unsafe";
 )
 
+// Addr is shorthand for unsafe.Pointer and is used to represent the address of Values.
 type Addr unsafe.Pointer
 
 func equalType(a, b Type) bool {
 	return a.String() == b.String()
 }
 
+// Value is the generic interface to reflection values.  Once its Kind is known,
+// such as BoolKind, the Value can be narrowed to the appropriate, more
+// specific interface, such as BoolValue.  Such narrowed values still implement
+// the Value interface.
 type Value interface {
+	// The kind of thing described: ArrayKind, BoolKind, etc.
 	Kind()	int;
+	// The reflection Type of the value.
 	Type()	Type;
+	// The address of the value.
 	Addr()	Addr;
+	// The value itself is the dynamic value of an empty interface.
 	Interface()	interface {};
 }
 
@@ -65,6 +74,8 @@
 
 // -- Missing
 
+// MissingValue represents a value whose type is not known. It usually
+// indicates an error.
 type MissingValue interface {
 	Value;
 }
@@ -79,10 +90,11 @@
 
 // -- Int
 
+// IntValue represents an int value.
 type IntValue interface {
 	Value;
-	Get()	int;
-	Set(int);
+	Get()	int;	// Get the underlying int.
+	Set(int);	// Set the underlying int.
 }
 
 type intValueStruct struct {
@@ -103,10 +115,11 @@
 
 // -- Int8
 
+// Int8Value represents an int8 value.
 type Int8Value interface {
 	Value;
-	Get()	int8;
-	Set(int8);
+	Get()	int8;	// Get the underlying int8.
+	Set(int8);	// Set the underlying int8.
 }
 
 type int8ValueStruct struct {
@@ -127,10 +140,11 @@
 
 // -- Int16
 
+// Int16Value represents an int16 value.
 type Int16Value interface {
 	Value;
-	Get()	int16;
-	Set(int16);
+	Get()	int16;	// Get the underlying int16.
+	Set(int16);	// Set the underlying int16.
 }
 
 type int16ValueStruct struct {
@@ -151,10 +165,11 @@
 
 // -- Int32
 
+// Int32Value represents an int32 value.
 type Int32Value interface {
 	Value;
-	Get()	int32;
-	Set(int32);
+	Get()	int32;	// Get the underlying int32.
+	Set(int32);	// Set the underlying int32.
 }
 
 type int32ValueStruct struct {
@@ -175,10 +190,11 @@
 
 // -- Int64
 
+// Int64Value represents an int64 value.
 type Int64Value interface {
 	Value;
-	Get()	int64;
-	Set(int64);
+	Get()	int64;	// Get the underlying int64.
+	Set(int64);	// Set the underlying int64.
 }
 
 type int64ValueStruct struct {
@@ -199,10 +215,11 @@
 
 // -- Uint
 
+// UintValue represents a uint value.
 type UintValue interface {
 	Value;
-	Get()	uint;
-	Set(uint);
+	Get()	uint;	// Get the underlying uint.
+	Set(uint);	// Set the underlying uint.
 }
 
 type uintValueStruct struct {
@@ -223,10 +240,11 @@
 
 // -- Uint8
 
+// Uint8Value represents a uint8 value.
 type Uint8Value interface {
 	Value;
-	Get()	uint8;
-	Set(uint8);
+	Get()	uint8;	// Get the underlying uint8.
+	Set(uint8);	// Set the underlying uint8.
 }
 
 type uint8ValueStruct struct {
@@ -247,10 +265,11 @@
 
 // -- Uint16
 
+// Uint16Value represents a uint16 value.
 type Uint16Value interface {
 	Value;
-	Get()	uint16;
-	Set(uint16);
+	Get()	uint16;	// Get the underlying uint16.
+	Set(uint16);	// Set the underlying uint16.
 }
 
 type uint16ValueStruct struct {
@@ -271,10 +290,11 @@
 
 // -- Uint32
 
+// Uint32Value represents a uint32 value.
 type Uint32Value interface {
 	Value;
-	Get()	uint32;
-	Set(uint32);
+	Get()	uint32;	// Get the underlying uint32.
+	Set(uint32);	// Set the underlying uint32.
 }
 
 type uint32ValueStruct struct {
@@ -295,10 +315,11 @@
 
 // -- Uint64
 
+// Uint64Value represents a uint64 value.
 type Uint64Value interface {
 	Value;
-	Get()	uint64;
-	Set(uint64);
+	Get()	uint64;	// Get the underlying uint64.
+	Set(uint64);	// Set the underlying uint64.
 }
 
 type uint64ValueStruct struct {
@@ -319,10 +340,11 @@
 
 // -- Uintptr
 
+// UintptrValue represents a uintptr value.
 type UintptrValue interface {
 	Value;
-	Get()	uintptr;
-	Set(uintptr);
+	Get()	uintptr;	// Get the underlying uintptr.
+	Set(uintptr);	// Set the underlying uintptr.
 }
 
 type uintptrValueStruct struct {
@@ -343,10 +365,11 @@
 
 // -- Float
 
+// FloatValue represents a float value.
 type FloatValue interface {
 	Value;
-	Get()	float;
-	Set(float);
+	Get()	float;	// Get the underlying float.
+	Set(float);	// Get the underlying float.
 }
 
 type floatValueStruct struct {
@@ -367,10 +390,11 @@
 
 // -- Float32
 
+// Float32Value represents a float32 value.
 type Float32Value interface {
 	Value;
-	Get()	float32;
-	Set(float32);
+	Get()	float32;	// Get the underlying float32.
+	Set(float32);	// Get the underlying float32.
 }
 
 type float32ValueStruct struct {
@@ -391,10 +415,11 @@
 
 // -- Float64
 
+// Float64Value represents a float64 value.
 type Float64Value interface {
 	Value;
-	Get()	float64;
-	Set(float64);
+	Get()	float64;	// Get the underlying float64.
+	Set(float64);	// Get the underlying float64.
 }
 
 type float64ValueStruct struct {
@@ -415,10 +440,11 @@
 
 // -- Float80
 
+// Float80Value represents a float80 value.
 type Float80Value interface {
 	Value;
-	Get()	float80;
-	Set(float80);
+	Get()	float80;	// Get the underlying float80.
+	Set(float80);	// Get the underlying float80.
 }
 
 type float80ValueStruct struct {
@@ -442,10 +468,11 @@
 
 // -- String
 
+// StringValue represents a string value.
 type StringValue interface {
 	Value;
-	Get()	string;
-	Set(string);
+	Get()	string;	// Get the underlying string value.
+	Set(string);	// Set the underlying string value.
 }
 
 type stringValueStruct struct {
@@ -466,10 +493,11 @@
 
 // -- Bool
 
+// BoolValue represents a bool value.
 type BoolValue interface {
 	Value;
-	Get()	bool;
-	Set(bool);
+	Get()	bool;	// Get the underlying bool value.
+	Set(bool);	// Set the underlying bool value.
 }
 
 type boolValueStruct struct {
@@ -490,11 +518,12 @@
 
 // -- Pointer
 
+// PtrValue represents a pointer value.
 type PtrValue interface {
 	Value;
-	Sub()	Value;
-	Get()	Addr;
-	SetSub(Value);
+	Sub()	Value;	// The Value pointed to.
+	Get()	Addr;	// Get the address stored in the pointer.
+	SetSub(Value);	// Set the the pointed-to Value.
 }
 
 type ptrValueStruct struct {
@@ -526,15 +555,16 @@
 // -- Array
 // Slices and arrays are represented by the same interface.
 
+// ArrayValue represents an array or slice value.
 type ArrayValue interface {
 	Value;
-	IsSlice()	bool;
-	Len()	int;
-	Cap() int;
-	Elem(i int)	Value;
-	SetLen(len int);
-	Set(src ArrayValue);
-	CopyFrom(src ArrayValue, n int)
+	IsSlice()	bool;	// Is this a slice (true) or array (false)?
+	Len()	int;	// The length of the array/slice.
+	Cap() int;	// The capacity of the array/slice (==Len() for arrays).
+	Elem(i int)	Value;	// The Value of the i'th element.
+	SetLen(len int);	// Set the length; slice only.
+	Set(src ArrayValue);	// Set the underlying Value; slice only for src and dest both.
+	CopyFrom(src ArrayValue, n int)	// Copy the elements from src; lengths must match.
 }
 
 func copyArray(dst ArrayValue, src ArrayValue, n int);
@@ -581,7 +611,7 @@
 
 func (v *sliceValueStruct) Set(src ArrayValue) {
 	if !src.IsSlice() {
-		panic("can't set from fixed array");
+		panic("can't set slice from array");
 	}
 	s := src.(*sliceValueStruct);
 	if !equalType(v.typ, s.typ) {
@@ -619,10 +649,11 @@
 }
 
 func (v *arrayValueStruct) SetLen(len int) {
+	panicln("can't set len of array");
 }
 
 func (v *arrayValueStruct) Set(src ArrayValue) {
-	panicln("can't set fixed array");
+	panicln("can't set array");
 }
 
 func (v *arrayValueStruct) Elem(i int) Value {
@@ -659,10 +690,12 @@
 
 // -- Map	TODO: finish and test
 
+// MapValue represents a map value.
+// Its implementation is incomplete.
 type MapValue interface {
 	Value;
-	Len()	int;
-	Elem(key Value)	Value;
+	Len()	int;	// The number of elements; currently always returns 0.
+	Elem(key Value)	Value;	// The value indexed by key; unimplemented.
 }
 
 type mapValueStruct struct {
@@ -684,6 +717,8 @@
 
 // -- Chan
 
+// ChanValue represents a chan value.
+// Its implementation is incomplete.
 type ChanValue interface {
 	Value;
 }
@@ -698,10 +733,11 @@
 
 // -- Struct
 
+// StructValue represents a struct value.
 type StructValue interface {
 	Value;
-	Len()	int;
-	Field(i int)	Value;
+	Len()	int;	// The number of fields.
+	Field(i int)	Value;	// The Value of field i.
 }
 
 type structValueStruct struct {
@@ -732,9 +768,10 @@
 
 // -- Interface
 
+// InterfaceValue represents an interface value.
 type InterfaceValue interface {
 	Value;
-	Get()	interface {};
+	Get()	interface {};	// Get the underlying interface{} value.
 }
 
 type interfaceValueStruct struct {
@@ -751,6 +788,9 @@
 
 // -- Func
 
+
+// FuncValue represents a func value.
+// Its implementation is incomplete.
 type FuncValue interface {
 	Value;
 }
@@ -801,6 +841,7 @@
 	return c(typ, addr);
 }
 
+// NewInitValue creates a new, zero-initialized Value for the specified Type.
 func NewInitValue(typ Type) Value {
 	// Some values cannot be made this way.
 	switch typ.Kind() {
@@ -819,6 +860,8 @@
 	return newValueAddr(typ, Addr(&data[0]));
 }
 
+// NewSliceValue creates a new, zero-initialized slice value (ArrayValue) for the specified
+// slice type (ArrayType), length, and capacity.
 func NewSliceValue(typ ArrayType, len, cap int) ArrayValue {
 	if !typ.IsSlice() {
 		return nil
@@ -869,7 +912,7 @@
 	}
 }
 
-
+// NewValue creates a new Value from the interface{} object provided.
 func NewValue(e interface {}) Value {
 	value, typestring, indir := sys.Reflect(e);
 	typ, ok := typecache[typestring];