type strings through the reflection library.

R=rsc
DELTA=187  (107 added, 28 deleted, 52 changed)
OCL=18510
CL=18510
diff --git a/src/lib/reflect/test.go b/src/lib/reflect/test.go
index d057251..54fd5ac 100644
--- a/src/lib/reflect/test.go
+++ b/src/lib/reflect/test.go
@@ -88,9 +88,11 @@
 export type T struct { a int; b float64; c string; d *int }
 
 func main() {
+//NOTE: INTERFACES PARSE INCORRECTLY: parser's Fields() stops at '('
 	var s string;
 	var t reflect.Type;
 
+	// Types
 	typedump("missing", "$missing$");
 	typedump("int", "int");
 	typedump("int8", "int8");
@@ -126,6 +128,7 @@
 	typedump("struct {a int8 \"hi \\x00there\\t\\n\\\"\\\\\"; }", "struct{a int8 \"hi \\x00there\\t\\n\\\"\\\\\"}");
 	typedump("struct {f *(args ...)}", "struct{f *(args ...)}");
 
+	// Values
 	valuedump("int8", "8");
 	valuedump("int16", "16");
 	valuedump("int32", "32");
@@ -191,4 +194,56 @@
 		value.(reflect.PtrValue).Sub().(reflect.ArrayValue).Elem(4).(reflect.IntValue).Put(123);
 		assert(reflect.ValueToString(value.(reflect.PtrValue).Sub()), "main.AA·test{1, 2, 3, 4, 123, 6, 7, 8, 9, 10}");
 	}
+
+	var pt reflect.PtrType;
+	var st reflect.StructType;
+	var mt reflect.MapType;
+	var at reflect.ArrayType;
+	var ct reflect.ChanType;
+	var name string;
+	var typ reflect.Type;
+	var tag string;
+	var offset uint64;
+
+	// Type strings
+	t = reflect.ParseTypeString("", "int8");
+	assert(t.String(), "int8");
+
+	t = reflect.ParseTypeString("", "*int8");
+	assert(t.String(), "*int8");
+	pt = t.(reflect.PtrType);
+	assert(pt.Sub().String(), "int8");
+
+	t = reflect.ParseTypeString("", "*struct {c *chan *int32; d float32}");
+	assert(t.String(), "*struct {c *chan *int32; d float32}");
+	pt = t.(reflect.PtrType);
+	assert(pt.Sub().String(), "struct {c *chan *int32; d float32}");
+	st = pt.Sub().(reflect.StructType);
+	name, typ, tag, offset = st.Field(0);
+	assert(typ.String(), "*chan *int32");
+	name, typ, tag, offset = st.Field(1);
+	assert(typ.String(), "float32");
+
+	//TODO! this is bad - can't put a method in an interface!
+	t = reflect.ParseTypeString("", "interface {a int}");
+	assert(t.String(), "interface {a int}");
+
+	t = reflect.ParseTypeString("", "*(a int8, b int32)");
+	assert(t.String(), "*(a int8, b int32)");
+
+	t = reflect.ParseTypeString("", "[32]int32");
+	assert(t.String(), "[32]int32");
+	at = t.(reflect.ArrayType);
+	assert(at.Elem().String(), "int32");
+
+	t = reflect.ParseTypeString("", "map[string]*int32");
+	assert(t.String(), "map[string]*int32");
+	mt = t.(reflect.MapType);
+	assert(mt.Key().String(), "string");
+	assert(mt.Elem().String(), "*int32");
+
+	t = reflect.ParseTypeString("", "chan<-string");
+	assert(t.String(), "chan<-string");
+	ct = t.(reflect.ChanType);
+	assert(ct.Elem().String(), "string");
 }