mirror of
https://github.com/golang/go.git
synced 2025-11-11 22:21:06 +00:00
[dev.regabi] cmd/compile: fix ir.Dump for []*CaseClause, etc
Dump uses reflection to print IR nodes, and it only knew how to print out the Nodes slice type itself. This CL adds support for printing any slice whose element type implements Node, such as SwitchStmt and SelectStmt's clause lists. Change-Id: I2fd8defe11868b564d1d389ea3cd9b8abcefac62 Reviewed-on: https://go-review.googlesource.com/c/go/+/281537 Trust: Matthew Dempsky <mdempsky@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
This commit is contained in:
parent
f24e40c14a
commit
c28ca67a96
1 changed files with 15 additions and 0 deletions
|
|
@ -1237,9 +1237,24 @@ func dumpNode(w io.Writer, n Node, depth int) {
|
|||
fmt.Fprintf(w, "%+v-%s", n.Op(), name)
|
||||
}
|
||||
dumpNodes(w, val, depth+1)
|
||||
default:
|
||||
if vf.Kind() == reflect.Slice && vf.Type().Elem().Implements(nodeType) {
|
||||
if vf.Len() == 0 {
|
||||
continue
|
||||
}
|
||||
if name != "" {
|
||||
indent(w, depth)
|
||||
fmt.Fprintf(w, "%+v-%s", n.Op(), name)
|
||||
}
|
||||
for i, n := 0, vf.Len(); i < n; i++ {
|
||||
dumpNode(w, vf.Index(i).Interface().(Node), depth+1)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var nodeType = reflect.TypeOf((*Node)(nil)).Elem()
|
||||
|
||||
func dumpNodes(w io.Writer, list Nodes, depth int) {
|
||||
if len(list) == 0 {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue