From 1e58bb14910f117554e5e749648e8b0d0771726b Mon Sep 17 00:00:00 2001 From: Josh Bleecher Snyder Date: Sat, 10 Nov 2018 07:00:32 -0800 Subject: [PATCH] cmd/compile: inline checknil Now that checknil has only a single caller, inline it. Passes toolstash-check. Change-Id: I5b13596bef84dd9a3e7f4bff8560903f1e54acfb Reviewed-on: https://go-review.googlesource.com/c/148829 Run-TryBot: Josh Bleecher Snyder TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick --- src/cmd/compile/internal/gc/closure.go | 8 +++++++- src/cmd/compile/internal/gc/subr.go | 12 ------------ 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/src/cmd/compile/internal/gc/closure.go b/src/cmd/compile/internal/gc/closure.go index 284ecdf457..6db0f02001 100644 --- a/src/cmd/compile/internal/gc/closure.go +++ b/src/cmd/compile/internal/gc/closure.go @@ -523,8 +523,14 @@ func walkpartialcall(n *Node, init *Nodes) *Node { // Trigger panic for method on nil interface now. // Otherwise it happens in the wrapper and is confusing. n.Left = cheapexpr(n.Left, init) + n.Left = walkexpr(n.Left, nil) - checknil(n.Left, init) + tab := nod(OITAB, n.Left, nil) + tab = typecheck(tab, ctxExpr) + + c := nod(OCHECKNIL, tab, nil) + c.SetTypecheck(1) + init.Append(c) } typ := partialCallType(n) diff --git a/src/cmd/compile/internal/gc/subr.go b/src/cmd/compile/internal/gc/subr.go index 3a261244d1..775147bff7 100644 --- a/src/cmd/compile/internal/gc/subr.go +++ b/src/cmd/compile/internal/gc/subr.go @@ -1829,18 +1829,6 @@ func isbadimport(path string, allowSpace bool) bool { return false } -func checknil(x *Node, init *Nodes) { - x = walkexpr(x, nil) // caller has not done this yet - if x.Type.IsInterface() { - x = nod(OITAB, x, nil) - x = typecheck(x, ctxExpr) - } - - n := nod(OCHECKNIL, x, nil) - n.SetTypecheck(1) - init.Append(n) -} - // Can this type be stored directly in an interface word? // Yes, if the representation is a single pointer. func isdirectiface(t *types.Type) bool { -- 2.50.0