]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: implement fmt.Formatter for Op formats %s, %v
authorRobert Griesemer <gri@golang.org>
Tue, 30 Aug 2016 21:21:33 +0000 (14:21 -0700)
committerRobert Griesemer <gri@golang.org>
Thu, 8 Sep 2016 21:34:11 +0000 (21:34 +0000)
Change-Id: I59e18fab37fd688fc1e578e2192e32e29fdf37f0
Reviewed-on: https://go-review.googlesource.com/28331
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
src/cmd/compile/internal/gc/fmt.go

index 816ccce1c208b152c0a5350a10e4e5ea4c8d06aa..798a7fd9c64e92a767564990c49a58fce3c219d2 100644 (file)
@@ -213,25 +213,38 @@ var goopnames = []string{
 }
 
 func (o Op) String() string {
-       return oconv(o, 0)
+       return fmt.Sprintf("%v", o)
 }
 
 func (o Op) GoString() string {
-       return oconv(o, FmtSharp)
+       return fmt.Sprintf("%#v", o)
 }
 
-func oconv(o Op, flag FmtFlag) string {
+func (o Op) Format(s fmt.State, format rune) {
+       switch format {
+       case 's', 'v':
+               o.oconv(s)
+
+       default:
+               fmt.Fprintf(s, "%%!%c(Op=%d)", format, o)
+       }
+}
+
+func (o Op) oconv(s fmt.State) {
+       flag := fmtFlag(s)
        if (flag&FmtSharp != 0) || fmtmode != FDbg {
                if o >= 0 && int(o) < len(goopnames) && goopnames[o] != "" {
-                       return goopnames[o]
+                       fmt.Fprint(s, goopnames[o])
+                       return
                }
        }
 
        if o >= 0 && int(o) < len(opnames) && opnames[o] != "" {
-               return opnames[o]
+               fmt.Fprint(s, opnames[o])
+               return
        }
 
-       return fmt.Sprintf("O-%d", o)
+       fmt.Sprintf("O-%d", o)
 }
 
 var classnames = []string{