aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/ir
diff options
context:
space:
mode:
authorCuong Manh Le <cuong.manhle.vn@gmail.com>2025-02-18 23:03:54 +0700
committerGopher Robot <gobot@golang.org>2025-02-18 17:52:54 -0800
commita08984bc8f2acacebeeadf7445ecfb67b7e7d7b1 (patch)
treed32d39245d26700619eec64fb1658a04b51b992a /src/cmd/compile/internal/ir
parent34073a736ab87d346399b8eef60d520a8b3cc5d4 (diff)
downloadgo-a08984bc8f2acacebeeadf7445ecfb67b7e7d7b1.tar.xz
cmd/compile: add ir.ContainsClosure
And use it to unify all codes that need parent/closure checking. Change-Id: I0b0aa1b007598668dff2c4bee31e21f0fb3830ce Reviewed-on: https://go-review.googlesource.com/c/go/+/650315 Auto-Submit: Cuong Manh Le <cuong.manhle.vn@gmail.com> Reviewed-by: David Chase <drchase@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Michael Knyszek <mknyszek@google.com>
Diffstat (limited to 'src/cmd/compile/internal/ir')
-rw-r--r--src/cmd/compile/internal/ir/func.go15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/cmd/compile/internal/ir/func.go b/src/cmd/compile/internal/ir/func.go
index 6354da3556..668537c90e 100644
--- a/src/cmd/compile/internal/ir/func.go
+++ b/src/cmd/compile/internal/ir/func.go
@@ -627,3 +627,18 @@ func (fn *Func) DeclareParams(setNname bool) {
declareParams(params, PPARAM, "~p", 0)
declareParams(results, PPARAMOUT, "~r", len(params))
}
+
+// ContainsClosure reports whether c is a closure contained within f.
+func ContainsClosure(f, c *Func) bool {
+ // Common cases.
+ if f == c || c.OClosure == nil {
+ return false
+ }
+
+ for p := c.ClosureParent; p != nil; p = p.ClosureParent {
+ if p == f {
+ return true
+ }
+ }
+ return false
+}