print array (not just *array) using %v

TBR=rsc
DELTA=34  (33 added, 0 deleted, 1 changed)
OCL=21718
CL=21718
This commit is contained in:
Rob Pike 2008-12-22 11:04:17 -08:00
parent eb32228627
commit b0d62676d2
2 changed files with 34 additions and 1 deletions

View file

@ -305,6 +305,14 @@ func getArrayPtr(v reflect.Value) (val reflect.ArrayValue, ok bool) {
return nil, false;
}
func getArray(v reflect.Value) (val reflect.ArrayValue, ok bool) {
switch v.Kind() {
case reflect.ArrayKind:
return v.(reflect.ArrayValue), true;
}
return nil, false;
}
// Convert ASCII to integer. n is 0 (and got is false) if no number present.
func parsenum(s string, start, end int) (n int, got bool, newi int) {
@ -365,7 +373,7 @@ func (p *P) printField(field reflect.Value) (was_string bool) {
if v, ok := getPtr(field); v == 0 {
s = "<nil>"
} else {
// pointer to array?
// pointer to array? (TODO(r): holdover; delete?)
if a, ok := getArrayPtr(field); ok {
p.addstr("&[");
for i := 0; i < a.Len(); i++ {
@ -380,6 +388,17 @@ func (p *P) printField(field reflect.Value) (was_string bool) {
s = p.fmt.uX64(uint64(v)).str();
}
}
case reflect.ArrayKind:
if a, ok := getArray(field); ok {
p.addstr("[");
for i := 0; i < a.Len(); i++ {
if i > 0 {
p.addstr(" ");
}
p.printField(a.Elem(i));
}
p.addstr("]");
}
case reflect.StructKind:
p.add('{');
v := field.(reflect.StructValue);