From: Youlin Feng Date: Wed, 20 Aug 2025 03:48:05 +0000 (+0800) Subject: cmd/compile: deduplication in the source code generated by mknode X-Git-Tag: go1.26rc1~1047 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=ba840c1bf9be0c3b133f2efd638ec6d32dbedaff;p=gostls13.git cmd/compile: deduplication in the source code generated by mknode Most types in the ir package don't have hidden children, so having their doChildrenWithHidden and editChildrenWithHidden methods call their own doChildren and editChildren methods can save a lot of duplicate code. Change-Id: Ib22a29d6a9a32855f3c3191ca2d26dff94ac556b Reviewed-on: https://go-review.googlesource.com/c/go/+/697476 Reviewed-by: Keith Randall Auto-Submit: Keith Randall LUCI-TryBot-Result: Go LUCI Reviewed-by: Keith Randall Reviewed-by: Carlos Amedee --- diff --git a/src/cmd/compile/internal/ir/mknode.go b/src/cmd/compile/internal/ir/mknode.go index e5df481a2d..2f439b9996 100644 --- a/src/cmd/compile/internal/ir/mknode.go +++ b/src/cmd/compile/internal/ir/mknode.go @@ -258,6 +258,7 @@ func processType(t *ast.TypeSpec) { var doChildrenWithHiddenBody strings.Builder var editChildrenBody strings.Builder var editChildrenWithHiddenBody strings.Builder + var hasHidden bool for _, f := range fields { names := f.Names ft := f.Type @@ -309,6 +310,7 @@ func processType(t *ast.TypeSpec) { "if n.%s != nil {\nn.%s = edit(n.%s).(%s%s)\n}\n", name, name, name, ptr, ft) } if hidden { + hasHidden = true continue } if isSlice { @@ -327,19 +329,27 @@ func processType(t *ast.TypeSpec) { } fmt.Fprintf(&buf, "func (n *%s) copy() Node {\nc := *n\n", name) buf.WriteString(copyBody.String()) - fmt.Fprintf(&buf, "return &c\n}\n") + buf.WriteString("return &c\n}\n") fmt.Fprintf(&buf, "func (n *%s) doChildren(do func(Node) bool) bool {\n", name) buf.WriteString(doChildrenBody.String()) - fmt.Fprintf(&buf, "return false\n}\n") + buf.WriteString("return false\n}\n") fmt.Fprintf(&buf, "func (n *%s) doChildrenWithHidden(do func(Node) bool) bool {\n", name) - buf.WriteString(doChildrenWithHiddenBody.String()) - fmt.Fprintf(&buf, "return false\n}\n") + if hasHidden { + buf.WriteString(doChildrenWithHiddenBody.String()) + buf.WriteString("return false\n}\n") + } else { + buf.WriteString("return n.doChildren(do)\n}\n") + } fmt.Fprintf(&buf, "func (n *%s) editChildren(edit func(Node) Node) {\n", name) buf.WriteString(editChildrenBody.String()) - fmt.Fprintf(&buf, "}\n") + buf.WriteString("}\n") fmt.Fprintf(&buf, "func (n *%s) editChildrenWithHidden(edit func(Node) Node) {\n", name) - buf.WriteString(editChildrenWithHiddenBody.String()) - fmt.Fprintf(&buf, "}\n") + if hasHidden { + buf.WriteString(editChildrenWithHiddenBody.String()) + } else { + buf.WriteString("n.editChildren(edit)\n") + } + buf.WriteString("}\n") } func generateHelpers() { diff --git a/src/cmd/compile/internal/ir/node_gen.go b/src/cmd/compile/internal/ir/node_gen.go index 026acbf9dd..2221045c93 100644 --- a/src/cmd/compile/internal/ir/node_gen.go +++ b/src/cmd/compile/internal/ir/node_gen.go @@ -24,16 +24,7 @@ func (n *AddStringExpr) doChildren(do func(Node) bool) bool { return false } func (n *AddStringExpr) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - if doNodes(n.List, do) { - return true - } - if n.Prealloc != nil && do(n.Prealloc) { - return true - } - return false + return n.doChildren(do) } func (n *AddStringExpr) editChildren(edit func(Node) Node) { editNodes(n.init, edit) @@ -43,11 +34,7 @@ func (n *AddStringExpr) editChildren(edit func(Node) Node) { } } func (n *AddStringExpr) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) - editNodes(n.List, edit) - if n.Prealloc != nil { - n.Prealloc = edit(n.Prealloc).(*Name) - } + n.editChildren(edit) } func (n *AddrExpr) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -69,16 +56,7 @@ func (n *AddrExpr) doChildren(do func(Node) bool) bool { return false } func (n *AddrExpr) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - if n.X != nil && do(n.X) { - return true - } - if n.Prealloc != nil && do(n.Prealloc) { - return true - } - return false + return n.doChildren(do) } func (n *AddrExpr) editChildren(edit func(Node) Node) { editNodes(n.init, edit) @@ -90,13 +68,7 @@ func (n *AddrExpr) editChildren(edit func(Node) Node) { } } func (n *AddrExpr) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) - if n.X != nil { - n.X = edit(n.X).(Node) - } - if n.Prealloc != nil { - n.Prealloc = edit(n.Prealloc).(*Name) - } + n.editChildren(edit) } func (n *AssignListStmt) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -120,16 +92,7 @@ func (n *AssignListStmt) doChildren(do func(Node) bool) bool { return false } func (n *AssignListStmt) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - if doNodes(n.Lhs, do) { - return true - } - if doNodes(n.Rhs, do) { - return true - } - return false + return n.doChildren(do) } func (n *AssignListStmt) editChildren(edit func(Node) Node) { editNodes(n.init, edit) @@ -137,9 +100,7 @@ func (n *AssignListStmt) editChildren(edit func(Node) Node) { editNodes(n.Rhs, edit) } func (n *AssignListStmt) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) - editNodes(n.Lhs, edit) - editNodes(n.Rhs, edit) + n.editChildren(edit) } func (n *AssignOpStmt) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -161,16 +122,7 @@ func (n *AssignOpStmt) doChildren(do func(Node) bool) bool { return false } func (n *AssignOpStmt) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - if n.X != nil && do(n.X) { - return true - } - if n.Y != nil && do(n.Y) { - return true - } - return false + return n.doChildren(do) } func (n *AssignOpStmt) editChildren(edit func(Node) Node) { editNodes(n.init, edit) @@ -182,13 +134,7 @@ func (n *AssignOpStmt) editChildren(edit func(Node) Node) { } } func (n *AssignOpStmt) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) - if n.X != nil { - n.X = edit(n.X).(Node) - } - if n.Y != nil { - n.Y = edit(n.Y).(Node) - } + n.editChildren(edit) } func (n *AssignStmt) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -210,16 +156,7 @@ func (n *AssignStmt) doChildren(do func(Node) bool) bool { return false } func (n *AssignStmt) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - if n.X != nil && do(n.X) { - return true - } - if n.Y != nil && do(n.Y) { - return true - } - return false + return n.doChildren(do) } func (n *AssignStmt) editChildren(edit func(Node) Node) { editNodes(n.init, edit) @@ -231,13 +168,7 @@ func (n *AssignStmt) editChildren(edit func(Node) Node) { } } func (n *AssignStmt) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) - if n.X != nil { - n.X = edit(n.X).(Node) - } - if n.Y != nil { - n.Y = edit(n.Y).(Node) - } + n.editChildren(edit) } func (n *BasicLit) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -253,16 +184,13 @@ func (n *BasicLit) doChildren(do func(Node) bool) bool { return false } func (n *BasicLit) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - return false + return n.doChildren(do) } func (n *BasicLit) editChildren(edit func(Node) Node) { editNodes(n.init, edit) } func (n *BasicLit) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) + n.editChildren(edit) } func (n *BinaryExpr) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -337,21 +265,14 @@ func (n *BlockStmt) doChildren(do func(Node) bool) bool { return false } func (n *BlockStmt) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - if doNodes(n.List, do) { - return true - } - return false + return n.doChildren(do) } func (n *BlockStmt) editChildren(edit func(Node) Node) { editNodes(n.init, edit) editNodes(n.List, edit) } func (n *BlockStmt) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) - editNodes(n.List, edit) + n.editChildren(edit) } func (n *BranchStmt) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -367,16 +288,13 @@ func (n *BranchStmt) doChildren(do func(Node) bool) bool { return false } func (n *BranchStmt) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - return false + return n.doChildren(do) } func (n *BranchStmt) editChildren(edit func(Node) Node) { editNodes(n.init, edit) } func (n *BranchStmt) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) + n.editChildren(edit) } func (n *CallExpr) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -480,22 +398,7 @@ func (n *CaseClause) doChildren(do func(Node) bool) bool { return false } func (n *CaseClause) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - if n.Var != nil && do(n.Var) { - return true - } - if doNodes(n.List, do) { - return true - } - if doNodes(n.RTypes, do) { - return true - } - if doNodes(n.Body, do) { - return true - } - return false + return n.doChildren(do) } func (n *CaseClause) editChildren(edit func(Node) Node) { editNodes(n.init, edit) @@ -507,13 +410,7 @@ func (n *CaseClause) editChildren(edit func(Node) Node) { editNodes(n.Body, edit) } func (n *CaseClause) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) - if n.Var != nil { - n.Var = edit(n.Var).(*Name) - } - editNodes(n.List, edit) - editNodes(n.RTypes, edit) - editNodes(n.Body, edit) + n.editChildren(edit) } func (n *ClosureExpr) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -532,13 +429,7 @@ func (n *ClosureExpr) doChildren(do func(Node) bool) bool { return false } func (n *ClosureExpr) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - if n.Prealloc != nil && do(n.Prealloc) { - return true - } - return false + return n.doChildren(do) } func (n *ClosureExpr) editChildren(edit func(Node) Node) { editNodes(n.init, edit) @@ -547,10 +438,7 @@ func (n *ClosureExpr) editChildren(edit func(Node) Node) { } } func (n *ClosureExpr) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) - if n.Prealloc != nil { - n.Prealloc = edit(n.Prealloc).(*Name) - } + n.editChildren(edit) } func (n *CommClause) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -573,16 +461,7 @@ func (n *CommClause) doChildren(do func(Node) bool) bool { return false } func (n *CommClause) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - if n.Comm != nil && do(n.Comm) { - return true - } - if doNodes(n.Body, do) { - return true - } - return false + return n.doChildren(do) } func (n *CommClause) editChildren(edit func(Node) Node) { editNodes(n.init, edit) @@ -592,11 +471,7 @@ func (n *CommClause) editChildren(edit func(Node) Node) { editNodes(n.Body, edit) } func (n *CommClause) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) - if n.Comm != nil { - n.Comm = edit(n.Comm).(Node) - } - editNodes(n.Body, edit) + n.editChildren(edit) } func (n *CompLitExpr) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -724,10 +599,7 @@ func (n *Decl) doChildren(do func(Node) bool) bool { return false } func (n *Decl) doChildrenWithHidden(do func(Node) bool) bool { - if n.X != nil && do(n.X) { - return true - } - return false + return n.doChildren(do) } func (n *Decl) editChildren(edit func(Node) Node) { if n.X != nil { @@ -735,9 +607,7 @@ func (n *Decl) editChildren(edit func(Node) Node) { } } func (n *Decl) editChildrenWithHidden(edit func(Node) Node) { - if n.X != nil { - n.X = edit(n.X).(*Name) - } + n.editChildren(edit) } func (n *DynamicType) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -759,16 +629,7 @@ func (n *DynamicType) doChildren(do func(Node) bool) bool { return false } func (n *DynamicType) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - if n.RType != nil && do(n.RType) { - return true - } - if n.ITab != nil && do(n.ITab) { - return true - } - return false + return n.doChildren(do) } func (n *DynamicType) editChildren(edit func(Node) Node) { editNodes(n.init, edit) @@ -780,13 +641,7 @@ func (n *DynamicType) editChildren(edit func(Node) Node) { } } func (n *DynamicType) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) - if n.RType != nil { - n.RType = edit(n.RType).(Node) - } - if n.ITab != nil { - n.ITab = edit(n.ITab).(Node) - } + n.editChildren(edit) } func (n *DynamicTypeAssertExpr) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -814,22 +669,7 @@ func (n *DynamicTypeAssertExpr) doChildren(do func(Node) bool) bool { return false } func (n *DynamicTypeAssertExpr) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - if n.X != nil && do(n.X) { - return true - } - if n.SrcRType != nil && do(n.SrcRType) { - return true - } - if n.RType != nil && do(n.RType) { - return true - } - if n.ITab != nil && do(n.ITab) { - return true - } - return false + return n.doChildren(do) } func (n *DynamicTypeAssertExpr) editChildren(edit func(Node) Node) { editNodes(n.init, edit) @@ -847,19 +687,7 @@ func (n *DynamicTypeAssertExpr) editChildren(edit func(Node) Node) { } } func (n *DynamicTypeAssertExpr) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) - if n.X != nil { - n.X = edit(n.X).(Node) - } - if n.SrcRType != nil { - n.SrcRType = edit(n.SrcRType).(Node) - } - if n.RType != nil { - n.RType = edit(n.RType).(Node) - } - if n.ITab != nil { - n.ITab = edit(n.ITab).(Node) - } + n.editChildren(edit) } func (n *ForStmt) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -885,19 +713,7 @@ func (n *ForStmt) doChildren(do func(Node) bool) bool { return false } func (n *ForStmt) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - if n.Cond != nil && do(n.Cond) { - return true - } - if n.Post != nil && do(n.Post) { - return true - } - if doNodes(n.Body, do) { - return true - } - return false + return n.doChildren(do) } func (n *ForStmt) editChildren(edit func(Node) Node) { editNodes(n.init, edit) @@ -910,14 +726,7 @@ func (n *ForStmt) editChildren(edit func(Node) Node) { editNodes(n.Body, edit) } func (n *ForStmt) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) - if n.Cond != nil { - n.Cond = edit(n.Cond).(Node) - } - if n.Post != nil { - n.Post = edit(n.Post).(Node) - } - editNodes(n.Body, edit) + n.editChildren(edit) } func (n *Func) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -941,16 +750,7 @@ func (n *GoDeferStmt) doChildren(do func(Node) bool) bool { return false } func (n *GoDeferStmt) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - if n.Call != nil && do(n.Call) { - return true - } - if n.DeferAt != nil && do(n.DeferAt) { - return true - } - return false + return n.doChildren(do) } func (n *GoDeferStmt) editChildren(edit func(Node) Node) { editNodes(n.init, edit) @@ -962,13 +762,7 @@ func (n *GoDeferStmt) editChildren(edit func(Node) Node) { } } func (n *GoDeferStmt) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) - if n.Call != nil { - n.Call = edit(n.Call).(Node) - } - if n.DeferAt != nil { - n.DeferAt = edit(n.DeferAt).(Expr) - } + n.editChildren(edit) } func (n *Ident) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -984,16 +778,13 @@ func (n *Ident) doChildren(do func(Node) bool) bool { return false } func (n *Ident) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - return false + return n.doChildren(do) } func (n *Ident) editChildren(edit func(Node) Node) { editNodes(n.init, edit) } func (n *Ident) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) + n.editChildren(edit) } func (n *IfStmt) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -1020,19 +811,7 @@ func (n *IfStmt) doChildren(do func(Node) bool) bool { return false } func (n *IfStmt) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - if n.Cond != nil && do(n.Cond) { - return true - } - if doNodes(n.Body, do) { - return true - } - if doNodes(n.Else, do) { - return true - } - return false + return n.doChildren(do) } func (n *IfStmt) editChildren(edit func(Node) Node) { editNodes(n.init, edit) @@ -1043,12 +822,7 @@ func (n *IfStmt) editChildren(edit func(Node) Node) { editNodes(n.Else, edit) } func (n *IfStmt) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) - if n.Cond != nil { - n.Cond = edit(n.Cond).(Node) - } - editNodes(n.Body, edit) - editNodes(n.Else, edit) + n.editChildren(edit) } func (n *IndexExpr) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -1119,16 +893,13 @@ func (n *InlineMarkStmt) doChildren(do func(Node) bool) bool { return false } func (n *InlineMarkStmt) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - return false + return n.doChildren(do) } func (n *InlineMarkStmt) editChildren(edit func(Node) Node) { editNodes(n.init, edit) } func (n *InlineMarkStmt) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) + n.editChildren(edit) } func (n *InlinedCallExpr) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -1152,16 +923,7 @@ func (n *InlinedCallExpr) doChildren(do func(Node) bool) bool { return false } func (n *InlinedCallExpr) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - if doNodes(n.Body, do) { - return true - } - if doNodes(n.ReturnVars, do) { - return true - } - return false + return n.doChildren(do) } func (n *InlinedCallExpr) editChildren(edit func(Node) Node) { editNodes(n.init, edit) @@ -1169,9 +931,7 @@ func (n *InlinedCallExpr) editChildren(edit func(Node) Node) { editNodes(n.ReturnVars, edit) } func (n *InlinedCallExpr) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) - editNodes(n.Body, edit) - editNodes(n.ReturnVars, edit) + n.editChildren(edit) } func (n *InterfaceSwitchStmt) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -1199,22 +959,7 @@ func (n *InterfaceSwitchStmt) doChildren(do func(Node) bool) bool { return false } func (n *InterfaceSwitchStmt) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - if n.Case != nil && do(n.Case) { - return true - } - if n.Itab != nil && do(n.Itab) { - return true - } - if n.RuntimeType != nil && do(n.RuntimeType) { - return true - } - if n.Hash != nil && do(n.Hash) { - return true - } - return false + return n.doChildren(do) } func (n *InterfaceSwitchStmt) editChildren(edit func(Node) Node) { editNodes(n.init, edit) @@ -1232,19 +977,7 @@ func (n *InterfaceSwitchStmt) editChildren(edit func(Node) Node) { } } func (n *InterfaceSwitchStmt) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) - if n.Case != nil { - n.Case = edit(n.Case).(Node) - } - if n.Itab != nil { - n.Itab = edit(n.Itab).(Node) - } - if n.RuntimeType != nil { - n.RuntimeType = edit(n.RuntimeType).(Node) - } - if n.Hash != nil { - n.Hash = edit(n.Hash).(Node) - } + n.editChildren(edit) } func (n *JumpTableStmt) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -1263,13 +996,7 @@ func (n *JumpTableStmt) doChildren(do func(Node) bool) bool { return false } func (n *JumpTableStmt) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - if n.Idx != nil && do(n.Idx) { - return true - } - return false + return n.doChildren(do) } func (n *JumpTableStmt) editChildren(edit func(Node) Node) { editNodes(n.init, edit) @@ -1278,10 +1005,7 @@ func (n *JumpTableStmt) editChildren(edit func(Node) Node) { } } func (n *JumpTableStmt) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) - if n.Idx != nil { - n.Idx = edit(n.Idx).(Node) - } + n.editChildren(edit) } func (n *KeyExpr) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -1302,28 +1026,10 @@ func (n *KeyExpr) doChildren(do func(Node) bool) bool { } return false } -func (n *KeyExpr) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - if n.Key != nil && do(n.Key) { - return true - } - if n.Value != nil && do(n.Value) { - return true - } - return false -} -func (n *KeyExpr) editChildren(edit func(Node) Node) { - editNodes(n.init, edit) - if n.Key != nil { - n.Key = edit(n.Key).(Node) - } - if n.Value != nil { - n.Value = edit(n.Value).(Node) - } -} -func (n *KeyExpr) editChildrenWithHidden(edit func(Node) Node) { +func (n *KeyExpr) doChildrenWithHidden(do func(Node) bool) bool { + return n.doChildren(do) +} +func (n *KeyExpr) editChildren(edit func(Node) Node) { editNodes(n.init, edit) if n.Key != nil { n.Key = edit(n.Key).(Node) @@ -1332,6 +1038,9 @@ func (n *KeyExpr) editChildrenWithHidden(edit func(Node) Node) { n.Value = edit(n.Value).(Node) } } +func (n *KeyExpr) editChildrenWithHidden(edit func(Node) Node) { + n.editChildren(edit) +} func (n *LabelStmt) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } func (n *LabelStmt) copy() Node { @@ -1346,16 +1055,13 @@ func (n *LabelStmt) doChildren(do func(Node) bool) bool { return false } func (n *LabelStmt) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - return false + return n.doChildren(do) } func (n *LabelStmt) editChildren(edit func(Node) Node) { editNodes(n.init, edit) } func (n *LabelStmt) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) + n.editChildren(edit) } func (n *LinksymOffsetExpr) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -1371,16 +1077,13 @@ func (n *LinksymOffsetExpr) doChildren(do func(Node) bool) bool { return false } func (n *LinksymOffsetExpr) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - return false + return n.doChildren(do) } func (n *LinksymOffsetExpr) editChildren(edit func(Node) Node) { editNodes(n.init, edit) } func (n *LinksymOffsetExpr) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) + n.editChildren(edit) } func (n *LogicalExpr) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -1402,16 +1105,7 @@ func (n *LogicalExpr) doChildren(do func(Node) bool) bool { return false } func (n *LogicalExpr) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - if n.X != nil && do(n.X) { - return true - } - if n.Y != nil && do(n.Y) { - return true - } - return false + return n.doChildren(do) } func (n *LogicalExpr) editChildren(edit func(Node) Node) { editNodes(n.init, edit) @@ -1423,13 +1117,7 @@ func (n *LogicalExpr) editChildren(edit func(Node) Node) { } } func (n *LogicalExpr) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) - if n.X != nil { - n.X = edit(n.X).(Node) - } - if n.Y != nil { - n.Y = edit(n.Y).(Node) - } + n.editChildren(edit) } func (n *MakeExpr) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -1502,16 +1190,13 @@ func (n *NilExpr) doChildren(do func(Node) bool) bool { return false } func (n *NilExpr) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - return false + return n.doChildren(do) } func (n *NilExpr) editChildren(edit func(Node) Node) { editNodes(n.init, edit) } func (n *NilExpr) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) + n.editChildren(edit) } func (n *ParenExpr) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -1530,13 +1215,7 @@ func (n *ParenExpr) doChildren(do func(Node) bool) bool { return false } func (n *ParenExpr) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - if n.X != nil && do(n.X) { - return true - } - return false + return n.doChildren(do) } func (n *ParenExpr) editChildren(edit func(Node) Node) { editNodes(n.init, edit) @@ -1545,10 +1224,7 @@ func (n *ParenExpr) editChildren(edit func(Node) Node) { } } func (n *ParenExpr) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) - if n.X != nil { - n.X = edit(n.X).(Node) - } + n.editChildren(edit) } func (n *RangeStmt) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -1676,16 +1352,13 @@ func (n *ResultExpr) doChildren(do func(Node) bool) bool { return false } func (n *ResultExpr) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - return false + return n.doChildren(do) } func (n *ResultExpr) editChildren(edit func(Node) Node) { editNodes(n.init, edit) } func (n *ResultExpr) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) + n.editChildren(edit) } func (n *ReturnStmt) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -1705,21 +1378,14 @@ func (n *ReturnStmt) doChildren(do func(Node) bool) bool { return false } func (n *ReturnStmt) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - if doNodes(n.Results, do) { - return true - } - return false + return n.doChildren(do) } func (n *ReturnStmt) editChildren(edit func(Node) Node) { editNodes(n.init, edit) editNodes(n.Results, edit) } func (n *ReturnStmt) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) - editNodes(n.Results, edit) + n.editChildren(edit) } func (n *SelectStmt) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -1743,16 +1409,7 @@ func (n *SelectStmt) doChildren(do func(Node) bool) bool { return false } func (n *SelectStmt) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - if doCommClauses(n.Cases, do) { - return true - } - if doNodes(n.Compiled, do) { - return true - } - return false + return n.doChildren(do) } func (n *SelectStmt) editChildren(edit func(Node) Node) { editNodes(n.init, edit) @@ -1760,9 +1417,7 @@ func (n *SelectStmt) editChildren(edit func(Node) Node) { editNodes(n.Compiled, edit) } func (n *SelectStmt) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) - editCommClauses(n.Cases, edit) - editNodes(n.Compiled, edit) + n.editChildren(edit) } func (n *SelectorExpr) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -1784,16 +1439,7 @@ func (n *SelectorExpr) doChildren(do func(Node) bool) bool { return false } func (n *SelectorExpr) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - if n.X != nil && do(n.X) { - return true - } - if n.Prealloc != nil && do(n.Prealloc) { - return true - } - return false + return n.doChildren(do) } func (n *SelectorExpr) editChildren(edit func(Node) Node) { editNodes(n.init, edit) @@ -1805,13 +1451,7 @@ func (n *SelectorExpr) editChildren(edit func(Node) Node) { } } func (n *SelectorExpr) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) - if n.X != nil { - n.X = edit(n.X).(Node) - } - if n.Prealloc != nil { - n.Prealloc = edit(n.Prealloc).(*Name) - } + n.editChildren(edit) } func (n *SendStmt) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -1833,16 +1473,7 @@ func (n *SendStmt) doChildren(do func(Node) bool) bool { return false } func (n *SendStmt) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - if n.Chan != nil && do(n.Chan) { - return true - } - if n.Value != nil && do(n.Value) { - return true - } - return false + return n.doChildren(do) } func (n *SendStmt) editChildren(edit func(Node) Node) { editNodes(n.init, edit) @@ -1854,13 +1485,7 @@ func (n *SendStmt) editChildren(edit func(Node) Node) { } } func (n *SendStmt) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) - if n.Chan != nil { - n.Chan = edit(n.Chan).(Node) - } - if n.Value != nil { - n.Value = edit(n.Value).(Node) - } + n.editChildren(edit) } func (n *SliceExpr) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -1888,22 +1513,7 @@ func (n *SliceExpr) doChildren(do func(Node) bool) bool { return false } func (n *SliceExpr) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - if n.X != nil && do(n.X) { - return true - } - if n.Low != nil && do(n.Low) { - return true - } - if n.High != nil && do(n.High) { - return true - } - if n.Max != nil && do(n.Max) { - return true - } - return false + return n.doChildren(do) } func (n *SliceExpr) editChildren(edit func(Node) Node) { editNodes(n.init, edit) @@ -1921,19 +1531,7 @@ func (n *SliceExpr) editChildren(edit func(Node) Node) { } } func (n *SliceExpr) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) - if n.X != nil { - n.X = edit(n.X).(Node) - } - if n.Low != nil { - n.Low = edit(n.Low).(Node) - } - if n.High != nil { - n.High = edit(n.High).(Node) - } - if n.Max != nil { - n.Max = edit(n.Max).(Node) - } + n.editChildren(edit) } func (n *SliceHeaderExpr) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -1958,19 +1556,7 @@ func (n *SliceHeaderExpr) doChildren(do func(Node) bool) bool { return false } func (n *SliceHeaderExpr) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - if n.Ptr != nil && do(n.Ptr) { - return true - } - if n.Len != nil && do(n.Len) { - return true - } - if n.Cap != nil && do(n.Cap) { - return true - } - return false + return n.doChildren(do) } func (n *SliceHeaderExpr) editChildren(edit func(Node) Node) { editNodes(n.init, edit) @@ -1985,16 +1571,7 @@ func (n *SliceHeaderExpr) editChildren(edit func(Node) Node) { } } func (n *SliceHeaderExpr) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) - if n.Ptr != nil { - n.Ptr = edit(n.Ptr).(Node) - } - if n.Len != nil { - n.Len = edit(n.Len).(Node) - } - if n.Cap != nil { - n.Cap = edit(n.Cap).(Node) - } + n.editChildren(edit) } func (n *StarExpr) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -2013,13 +1590,7 @@ func (n *StarExpr) doChildren(do func(Node) bool) bool { return false } func (n *StarExpr) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - if n.X != nil && do(n.X) { - return true - } - return false + return n.doChildren(do) } func (n *StarExpr) editChildren(edit func(Node) Node) { editNodes(n.init, edit) @@ -2028,10 +1599,7 @@ func (n *StarExpr) editChildren(edit func(Node) Node) { } } func (n *StarExpr) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) - if n.X != nil { - n.X = edit(n.X).(Node) - } + n.editChildren(edit) } func (n *StringHeaderExpr) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -2053,16 +1621,7 @@ func (n *StringHeaderExpr) doChildren(do func(Node) bool) bool { return false } func (n *StringHeaderExpr) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - if n.Ptr != nil && do(n.Ptr) { - return true - } - if n.Len != nil && do(n.Len) { - return true - } - return false + return n.doChildren(do) } func (n *StringHeaderExpr) editChildren(edit func(Node) Node) { editNodes(n.init, edit) @@ -2074,13 +1633,7 @@ func (n *StringHeaderExpr) editChildren(edit func(Node) Node) { } } func (n *StringHeaderExpr) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) - if n.Ptr != nil { - n.Ptr = edit(n.Ptr).(Node) - } - if n.Len != nil { - n.Len = edit(n.Len).(Node) - } + n.editChildren(edit) } func (n *StructKeyExpr) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -2099,13 +1652,7 @@ func (n *StructKeyExpr) doChildren(do func(Node) bool) bool { return false } func (n *StructKeyExpr) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - if n.Value != nil && do(n.Value) { - return true - } - return false + return n.doChildren(do) } func (n *StructKeyExpr) editChildren(edit func(Node) Node) { editNodes(n.init, edit) @@ -2114,10 +1661,7 @@ func (n *StructKeyExpr) editChildren(edit func(Node) Node) { } } func (n *StructKeyExpr) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) - if n.Value != nil { - n.Value = edit(n.Value).(Node) - } + n.editChildren(edit) } func (n *SwitchStmt) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -2144,19 +1688,7 @@ func (n *SwitchStmt) doChildren(do func(Node) bool) bool { return false } func (n *SwitchStmt) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - if n.Tag != nil && do(n.Tag) { - return true - } - if doCaseClauses(n.Cases, do) { - return true - } - if doNodes(n.Compiled, do) { - return true - } - return false + return n.doChildren(do) } func (n *SwitchStmt) editChildren(edit func(Node) Node) { editNodes(n.init, edit) @@ -2167,12 +1699,7 @@ func (n *SwitchStmt) editChildren(edit func(Node) Node) { editNodes(n.Compiled, edit) } func (n *SwitchStmt) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) - if n.Tag != nil { - n.Tag = edit(n.Tag).(Node) - } - editCaseClauses(n.Cases, edit) - editNodes(n.Compiled, edit) + n.editChildren(edit) } func (n *TailCallStmt) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -2191,13 +1718,7 @@ func (n *TailCallStmt) doChildren(do func(Node) bool) bool { return false } func (n *TailCallStmt) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - if n.Call != nil && do(n.Call) { - return true - } - return false + return n.doChildren(do) } func (n *TailCallStmt) editChildren(edit func(Node) Node) { editNodes(n.init, edit) @@ -2206,10 +1727,7 @@ func (n *TailCallStmt) editChildren(edit func(Node) Node) { } } func (n *TailCallStmt) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) - if n.Call != nil { - n.Call = edit(n.Call).(*CallExpr) - } + n.editChildren(edit) } func (n *TypeAssertExpr) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -2270,13 +1788,7 @@ func (n *TypeSwitchGuard) doChildren(do func(Node) bool) bool { return false } func (n *TypeSwitchGuard) doChildrenWithHidden(do func(Node) bool) bool { - if n.Tag != nil && do(n.Tag) { - return true - } - if n.X != nil && do(n.X) { - return true - } - return false + return n.doChildren(do) } func (n *TypeSwitchGuard) editChildren(edit func(Node) Node) { if n.Tag != nil { @@ -2287,12 +1799,7 @@ func (n *TypeSwitchGuard) editChildren(edit func(Node) Node) { } } func (n *TypeSwitchGuard) editChildrenWithHidden(edit func(Node) Node) { - if n.Tag != nil { - n.Tag = edit(n.Tag).(*Ident) - } - if n.X != nil { - n.X = edit(n.X).(Node) - } + n.editChildren(edit) } func (n *UnaryExpr) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -2311,13 +1818,7 @@ func (n *UnaryExpr) doChildren(do func(Node) bool) bool { return false } func (n *UnaryExpr) doChildrenWithHidden(do func(Node) bool) bool { - if doNodes(n.init, do) { - return true - } - if n.X != nil && do(n.X) { - return true - } - return false + return n.doChildren(do) } func (n *UnaryExpr) editChildren(edit func(Node) Node) { editNodes(n.init, edit) @@ -2326,10 +1827,7 @@ func (n *UnaryExpr) editChildren(edit func(Node) Node) { } } func (n *UnaryExpr) editChildrenWithHidden(edit func(Node) Node) { - editNodes(n.init, edit) - if n.X != nil { - n.X = edit(n.X).(Node) - } + n.editChildren(edit) } func (n *typeNode) Format(s fmt.State, verb rune) { fmtNode(n, s, verb) } @@ -2341,11 +1839,12 @@ func (n *typeNode) doChildren(do func(Node) bool) bool { return false } func (n *typeNode) doChildrenWithHidden(do func(Node) bool) bool { - return false + return n.doChildren(do) } func (n *typeNode) editChildren(edit func(Node) Node) { } func (n *typeNode) editChildrenWithHidden(edit func(Node) Node) { + n.editChildren(edit) } func copyCaseClauses(list []*CaseClause) []*CaseClause {