]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: remove nodeNeedsWrapper flag
authorCuong Manh Le <cuong.manhle.vn@gmail.com>
Sat, 12 Sep 2020 00:19:22 +0000 (07:19 +0700)
committerCuong Manh Le <cuong.manhle.vn@gmail.com>
Sun, 13 Sep 2020 04:35:35 +0000 (04:35 +0000)
CL 254397 attached OVARLIVE nodes to OCALLxxx nodes Nbody.

The NeedsWrapper flag is now redundant with n.Nbody.Len() > 0
condition, so use that condition instead and remove the flag.

Passes toolstash-check.

Change-Id: Iebc3e674d3c0040a876ca4be05025943d2b4fb31
Reviewed-on: https://go-review.googlesource.com/c/go/+/254398
Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
src/cmd/compile/internal/gc/order.go
src/cmd/compile/internal/gc/syntax.go
src/cmd/compile/internal/gc/walk.go

index 341f4ee66fc34c59133115c6877c6e55552eefe7..75da154fe25630e4296632c11262a46fad09808d 100644 (file)
@@ -496,7 +496,6 @@ func (o *Order) call(n *Node) {
                        arg.Left = x
                        x.Name.SetAddrtaken(true) // ensure SSA keeps the x variable
                        n.Nbody.Append(typecheck(nod(OVARLIVE, x, nil), ctxStmt))
-                       n.SetNeedsWrapper(true)
                }
        }
 
index 9592b7484ce38a8559fa40708023a6d29a438af2..14d2710da4f40e27dfc51a3eaded40ba4503dbcb 100644 (file)
@@ -141,20 +141,19 @@ const (
        nodeInitorder, _                   // tracks state during init1; two bits
        _, _                               // second nodeInitorder bit
        _, nodeHasBreak
-       _, nodeNoInline     // used internally by inliner to indicate that a function call should not be inlined; set for OCALLFUNC and OCALLMETH only
-       _, nodeImplicit     // implicit OADDR or ODEREF; ++/-- statement represented as OASOP; or ANDNOT lowered to OAND
-       _, nodeIsDDD        // is the argument variadic
-       _, nodeDiag         // already printed error about this
-       _, nodeColas        // OAS resulting from :=
-       _, nodeNonNil       // guaranteed to be non-nil
-       _, nodeTransient    // storage can be reused immediately after this statement
-       _, nodeBounded      // bounds check unnecessary
-       _, nodeHasCall      // expression contains a function call
-       _, nodeLikely       // if statement condition likely
-       _, nodeHasVal       // node.E contains a Val
-       _, nodeHasOpt       // node.E contains an Opt
-       _, nodeEmbedded     // ODCLFIELD embedded type
-       _, nodeNeedsWrapper // OCALLxxx node that needs to be wrapped
+       _, nodeNoInline  // used internally by inliner to indicate that a function call should not be inlined; set for OCALLFUNC and OCALLMETH only
+       _, nodeImplicit  // implicit OADDR or ODEREF; ++/-- statement represented as OASOP; or ANDNOT lowered to OAND
+       _, nodeIsDDD     // is the argument variadic
+       _, nodeDiag      // already printed error about this
+       _, nodeColas     // OAS resulting from :=
+       _, nodeNonNil    // guaranteed to be non-nil
+       _, nodeTransient // storage can be reused immediately after this statement
+       _, nodeBounded   // bounds check unnecessary
+       _, nodeHasCall   // expression contains a function call
+       _, nodeLikely    // if statement condition likely
+       _, nodeHasVal    // node.E contains a Val
+       _, nodeHasOpt    // node.E contains an Opt
+       _, nodeEmbedded  // ODCLFIELD embedded type
 )
 
 func (n *Node) Class() Class     { return Class(n.flags.get3(nodeClass)) }
@@ -287,20 +286,6 @@ func (n *Node) SetIota(x int64) {
        n.Xoffset = x
 }
 
-func (n *Node) NeedsWrapper() bool {
-       return n.flags&nodeNeedsWrapper != 0
-}
-
-// SetNeedsWrapper indicates that OCALLxxx node needs to be wrapped by a closure.
-func (n *Node) SetNeedsWrapper(b bool) {
-       switch n.Op {
-       case OCALLFUNC, OCALLMETH, OCALLINTER:
-       default:
-               Fatalf("Node.SetNeedsWrapper %v", n.Op)
-       }
-       n.flags.set(nodeNeedsWrapper, b)
-}
-
 // mayBeShared reports whether n may occur in multiple places in the AST.
 // Extra care must be taken when mutating such a node.
 func (n *Node) mayBeShared() bool {
index 361de7e0f38c86e500b6e4c34a7258af9e0db57e..2d2936688040f841c53e23cdbc1e64857223db94 100644 (file)
@@ -231,12 +231,15 @@ func walkstmt(n *Node) *Node {
                case OCOPY:
                        n.Left = copyany(n.Left, &n.Ninit, true)
 
-               default:
-                       if n.Left.NeedsWrapper() {
+               case OCALLFUNC, OCALLMETH, OCALLINTER:
+                       if n.Left.Nbody.Len() > 0 {
                                n.Left = wrapCall(n.Left, &n.Ninit)
                        } else {
                                n.Left = walkexpr(n.Left, &n.Ninit)
                        }
+
+               default:
+                       n.Left = walkexpr(n.Left, &n.Ninit)
                }
 
        case OFOR, OFORUNTIL: