]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.regabi] cmd/compile: simplify some tree traversal code
authorMatthew Dempsky <mdempsky@google.com>
Sun, 27 Dec 2020 06:00:53 +0000 (22:00 -0800)
committerMatthew Dempsky <mdempsky@google.com>
Mon, 28 Dec 2020 07:45:00 +0000 (07:45 +0000)
When looking for referenced functions within bottomUpVisitor and
initDeps, the logic for ODOTMETH, OCALLPART, and OMETHEXPR are
basically identical, especially after previous refactorings to make
them use MethodExprName. This CL makes them exactly identical.

Passes toolstash -cmp.

Change-Id: I1f59c9be99aa9484d0397a0a6fb8ddd894a31c68
Reviewed-on: https://go-review.googlesource.com/c/go/+/280441
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>
src/cmd/compile/internal/ir/scc.go
src/cmd/compile/internal/pkginit/initorder.go

index 4f646e22b5ab180d004e3c5e7993b43f9adee4fa..f35c4d44e9d8bf2e9c544f05b4b22f523818d5d2 100644 (file)
@@ -76,48 +76,27 @@ func (v *bottomUpVisitor) visit(n *Func) uint32 {
        min := v.visitgen
        v.stack = append(v.stack, n)
 
+       do := func(defn Node) {
+               if defn != nil {
+                       if m := v.visit(defn.(*Func)); m < min {
+                               min = m
+                       }
+               }
+       }
+
        Visit(n, func(n Node) {
                switch n.Op() {
                case ONAME:
-                       n := n.(*Name)
-                       if n.Class_ == PFUNC {
-                               if n != nil && n.Name().Defn != nil {
-                                       if m := v.visit(n.Name().Defn.(*Func)); m < min {
-                                               min = m
-                                       }
-                               }
+                       if n := n.(*Name); n.Class_ == PFUNC {
+                               do(n.Defn)
                        }
-               case OMETHEXPR:
-                       n := n.(*MethodExpr)
-                       fn := MethodExprName(n)
-                       if fn != nil && fn.Defn != nil {
-                               if m := v.visit(fn.Defn.(*Func)); m < min {
-                                       min = m
-                               }
-                       }
-               case ODOTMETH:
-                       n := n.(*SelectorExpr)
-                       fn := MethodExprName(n)
-                       if fn != nil && fn.Op() == ONAME && fn.Class_ == PFUNC && fn.Defn != nil {
-                               if m := v.visit(fn.Defn.(*Func)); m < min {
-                                       min = m
-                               }
-                       }
-               case OCALLPART:
-                       n := n.(*CallPartExpr)
-                       fn := AsNode(n.Method.Nname)
-                       if fn != nil && fn.Op() == ONAME {
-                               if fn := fn.(*Name); fn.Class_ == PFUNC && fn.Name().Defn != nil {
-                                       if m := v.visit(fn.Name().Defn.(*Func)); m < min {
-                                               min = m
-                                       }
-                               }
+               case ODOTMETH, OCALLPART, OMETHEXPR:
+                       if fn := MethodExprName(n); fn != nil {
+                               do(fn.Defn)
                        }
                case OCLOSURE:
                        n := n.(*ClosureExpr)
-                       if m := v.visit(n.Func); m < min {
-                               min = m
-                       }
+                       do(n.Func)
                }
        })
 
index d63c5a4717da686864dfa88ce4d03fbac7848e32..c6e223954d33a54639dc1e11490d344aed7c93b9 100644 (file)
@@ -289,10 +289,6 @@ func (d *initDeps) inspectList(l ir.Nodes) { ir.VisitList(l, d.cachedVisit()) }
 // referenced by n, if any.
 func (d *initDeps) visit(n ir.Node) {
        switch n.Op() {
-       case ir.OMETHEXPR:
-               n := n.(*ir.MethodExpr)
-               d.foundDep(ir.MethodExprName(n))
-
        case ir.ONAME:
                n := n.(*ir.Name)
                switch n.Class_ {
@@ -304,7 +300,7 @@ func (d *initDeps) visit(n ir.Node) {
                n := n.(*ir.ClosureExpr)
                d.inspectList(n.Func.Body)
 
-       case ir.ODOTMETH, ir.OCALLPART:
+       case ir.ODOTMETH, ir.OCALLPART, ir.OMETHEXPR:
                d.foundDep(ir.MethodExprName(n))
        }
 }