aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/noder/reader.go
diff options
context:
space:
mode:
authorCuong Manh Le <cuong.manhle.vn@gmail.com>2021-06-20 22:17:19 +0700
committerCuong Manh Le <cuong.manhle.vn@gmail.com>2021-06-21 04:53:21 +0000
commite57da8e53cadd2f456c6a9457beabd1b4659fc1f (patch)
treea7b7f8121e174f61e402c4a4e93eafe85a258340 /src/cmd/compile/internal/noder/reader.go
parent3f7f72a258394e19610c14772b07ba6f13e8bae6 (diff)
downloadgo-e57da8e53cadd2f456c6a9457beabd1b4659fc1f.tar.gz
go-e57da8e53cadd2f456c6a9457beabd1b4659fc1f.zip
[dev.typeparams] cmd/compile: explain why reader.funcExt need to set n.Defn
Change-Id: I1a7d669879af57a1c1f48ce63ff0d214b694e680 Reviewed-on: https://go-review.googlesource.com/c/go/+/329572 Trust: Cuong Manh Le <cuong.manhle.vn@gmail.com> Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Diffstat (limited to 'src/cmd/compile/internal/noder/reader.go')
-rw-r--r--src/cmd/compile/internal/noder/reader.go9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/cmd/compile/internal/noder/reader.go b/src/cmd/compile/internal/noder/reader.go
index ad3cc25fd0..4fc9e7a777 100644
--- a/src/cmd/compile/internal/noder/reader.go
+++ b/src/cmd/compile/internal/noder/reader.go
@@ -741,8 +741,13 @@ func (r *reader) funcExt(name *ir.Name) {
fn.SetPos(name.Pos())
}
- // TODO(mdempsky): Remember why I wrote this code. I think it has to
- // do with how ir.VisitFuncsBottomUp works?
+ // Normally, we only compile local functions, which saves redundant compilation work.
+ // n.Defn is not nil for local functions, and is nil for imported function. But for
+ // generic functions, we might have an instantiation that no other package has seen before.
+ // So we need to be conservative and compile it again.
+ //
+ // That's why name.Defn is set here, so ir.VisitFuncsBottomUp can analyze function.
+ // TODO(mdempsky,cuonglm): find a cleaner way to handle this.
if name.Sym().Pkg == types.LocalPkg || r.hasTypeParams() {
name.Defn = fn
}