]> Cypherpunks repositories - gostls13.git/commitdiff
print the value using (in effect) %v when Printf is given mismatched args for its...
authorRob Pike <r@golang.org>
Fri, 28 Aug 2009 20:02:34 +0000 (13:02 -0700)
committerRob Pike <r@golang.org>
Fri, 28 Aug 2009 20:02:34 +0000 (13:02 -0700)
Printf("%s", 2) gives %s(int=2)

R=rsc
DELTA=12  (10 added, 0 deleted, 2 changed)
OCL=34042
CL=34044

src/pkg/fmt/fmt_test.go
src/pkg/fmt/print.go

index 76234e552b2ef3ef7086ee3402b27a981c16ab78..5e16c5f2765564647bfc8fae8cc2cdce8e82f370 100644 (file)
@@ -85,6 +85,10 @@ var fmttests = []fmtTest{
        fmtTest{ "%v",          &array,                 "&[1 2 3 4 5]" },
        fmtTest{ "%v",          &iarray,                        "&[1 hello 2.5 <nil>]" },
 
+       // erroneous formats
+       fmtTest{ "",            2,                      "?(extra int=2)" },
+       fmtTest{ "%d",          "hello",                "%d(string=hello)%" },
+
        // old test/fmt_test.go
        fmtTest{ "%d",          1234,                   "1234" },
        fmtTest{ "%d",          -1234,                  "-1234" },
index bb1030e726b27468c33fb7cc6ca9f8039a9e652f..e5177ef19c29e9241ccc01bf47dcbc766cff697d 100644 (file)
@@ -700,14 +700,20 @@ func (p *pp) doprintf(format string, v *reflect.StructValue) {
 
                        default:
                        badtype:
-                               s = "%" + string(c) + "(" + field.Type().String() + ")%";
+                               s = "%" + string(c) + "(" + field.Type().String() + "=";
+                               p.addstr(s);
+                               p.printField(field);
+                               s= ")%";
                }
                p.addstr(s);
        }
        if fieldnum < v.NumField() {
                p.addstr("?(extra ");
                for ; fieldnum < v.NumField(); fieldnum++ {
-                       p.addstr(getField(v, fieldnum).Type().String());
+                       field := getField(v, fieldnum);
+                       p.addstr(field.Type().String());
+                       p.addstr("=");
+                       p.printField(field);
                        if fieldnum + 1 < v.NumField() {
                                p.addstr(", ");
                        }