diff options
Diffstat (limited to 'src/lib/fmt')
-rw-r--r-- | src/lib/fmt/fmt_test.go | 22 | ||||
-rw-r--r-- | src/lib/fmt/print.go | 7 |
2 files changed, 7 insertions, 22 deletions
diff --git a/src/lib/fmt/fmt_test.go b/src/lib/fmt/fmt_test.go index 34acab08b..e4158624b 100644 --- a/src/lib/fmt/fmt_test.go +++ b/src/lib/fmt/fmt_test.go @@ -29,7 +29,7 @@ type fmtTest struct { const b32 uint32 = 1<<32 - 1 const b64 uint64 = 1<<64 - 1 var array = []int{1, 2, 3, 4, 5} - +var iarray = []interface{}{1, "hello", 2.5, nil} var fmttests = []fmtTest{ // basic string @@ -80,10 +80,10 @@ var fmttests = []fmtTest{ fmtTest{ "% d", -12345, "-12345" }, // arrays - // TODO: when arrays work in interfaces, enable this line - // and delete the TestArrayPrinter routine below - // fmtTest{ "%v", array, "[1 2 3 4 5]" }, + fmtTest{ "%v", array, "[1 2 3 4 5]" }, + fmtTest{ "%v", iarray, "[1 hello 2.5 <nil>]" }, fmtTest{ "%v", &array, "&[1 2 3 4 5]" }, + fmtTest{ "%v", &iarray, "&[1 hello 2.5 <nil>]" }, // old test/fmt_test.go fmtTest{ "%d", 1234, "1234" }, @@ -240,17 +240,3 @@ func TestStructPrinter(t *testing.T) { } } } - -func TestArrayPrinter(t *testing.T) { - a := []int{1, 2, 3, 4, 5}; - want := "[1 2 3 4 5]"; - out := fmt.Sprintf("%v", a); - if out != want { - t.Errorf("Sprintf(%%v, array) = %q, want %q", out, want); - } - want = "&" + want; - out = fmt.Sprintf("%v", &a); - if out != want { - t.Errorf("Sprintf(%%v, &array) = %q, want %q", out, want); - } -} diff --git a/src/lib/fmt/print.go b/src/lib/fmt/print.go index ca5bec934..5fd230f2c 100644 --- a/src/lib/fmt/print.go +++ b/src/lib/fmt/print.go @@ -451,12 +451,11 @@ func (p *pp) printField(field reflect.Value) (was_string bool) { } p.add('}'); case reflect.InterfaceKind: - inter := field.(reflect.InterfaceValue).Get(); - if inter == nil { + value := field.(reflect.InterfaceValue).Value(); + if value == nil { s = "<nil>" } else { - // should never happen since a non-nil interface always has a type - s = "<non-nil interface>"; + return p.printField(value); } default: s = "?" + field.Type().String() + "?"; |