]> Cypherpunks repositories - gostls13.git/commit
cmd/gc: allow runtime to define a hex integer type for printing
authorRuss Cox <rsc@golang.org>
Fri, 29 Aug 2014 17:22:17 +0000 (13:22 -0400)
committerRuss Cox <rsc@golang.org>
Fri, 29 Aug 2014 17:22:17 +0000 (13:22 -0400)
commit4af796fb6ee041d2c541f902ba2effbf23978d4a
tree4c138699e4efd6d89a251541a7fd24079ebba287
parentd11bb3b177feb47d20e00246fb915af50773904a
cmd/gc: allow runtime to define a hex integer type for printing

As part of the translation of the runtime, we need to rewrite
C printf calls to Go print calls. Consider this C printf:

        runtime·printf("[signal %x code=%p addr=%p pc=%p]\n",
                g->sig, g->sigcode0, g->sigcode1, g->sigpc);

Today the only way to write that in Go is:

        print("[signal ")
        printhex(uint64(g->sig))
        print(" code=")
        printhex(uint64(g->sigcode0))
        print(" addr=")
        printhex(uint64(g->sigcode1))
        print(" pc=")
        printhex(uint64(g->sigpc))
        print("]\n")

(That's nearly exactly what runtime code looked like in C before
I added runtime·printf.)

This CL recognizes the unexported type runtime.hex as an integer
that should be printed in hexadecimal instead of decimal.
It's a little kludgy, but it's restricted to package runtime.
Other packages can define type hex with no effect at all.

Now we can translate that original printf as the more compact:

        print("[signal ", hex(g->sig), " code=", hex(g->sigcode0),
                " addr=", hex(g->sigcode1), " pc=", hex(g->sigpc), "]\n")

LGTM=r, iant
R=r, iant
CC=golang-codereviews
https://golang.org/cl/133220043
src/cmd/gc/builtin.c
src/cmd/gc/runtime.go
src/cmd/gc/walk.c
src/pkg/runtime/print1.go