aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/noder/reader.go
diff options
context:
space:
mode:
authorMatthew Dempsky <mdempsky@google.com>2023-08-09 01:43:47 -0700
committerMatthew Dempsky <mdempsky@google.com>2023-08-11 17:45:02 +0000
commit832212df9aba985bdc6a8378a821e1030554fa2f (patch)
tree3ff8809afe792650337c1530acca744836c1fb3d /src/cmd/compile/internal/noder/reader.go
parent673d64ac7009b41c55b90b33ca346a86351959ee (diff)
downloadgo-832212df9aba985bdc6a8378a821e1030554fa2f.tar.xz
cmd/compile: make use of types2.InitOrder
types2 already computes the order that package-level variables need to be initialized in. Start using it. Change-Id: Idf2740f963b8146f7c927f57effdbf245f41d355 Reviewed-on: https://go-review.googlesource.com/c/go/+/517617 Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Michael Knyszek <mknyszek@google.com>
Diffstat (limited to 'src/cmd/compile/internal/noder/reader.go')
-rw-r--r--src/cmd/compile/internal/noder/reader.go44
1 files changed, 24 insertions, 20 deletions
diff --git a/src/cmd/compile/internal/noder/reader.go b/src/cmd/compile/internal/noder/reader.go
index 6dec060c8c..f63040ae13 100644
--- a/src/cmd/compile/internal/noder/reader.go
+++ b/src/cmd/compile/internal/noder/reader.go
@@ -3305,6 +3305,30 @@ func (r *reader) pkgInit(self *types.Pkg, target *ir.Package) {
r.pkgDecls(target)
+ initOrder := make([]ir.Node, r.Len())
+ for i := range initOrder {
+ lhs := make([]ir.Node, r.Len())
+ for j := range lhs {
+ lhs[j] = r.obj()
+ }
+ rhs := r.expr()
+ pos := lhs[0].Pos()
+
+ var as ir.Node
+ if len(lhs) == 1 {
+ as = typecheck.Stmt(ir.NewAssignStmt(pos, lhs[0], rhs))
+ } else {
+ as = typecheck.Stmt(ir.NewAssignListStmt(pos, ir.OAS2, lhs, []ir.Node{rhs}))
+ }
+
+ for _, v := range lhs {
+ v.(*ir.Name).Defn = as
+ }
+
+ initOrder[i] = as
+ }
+ target.InitOrder = initOrder
+
r.Sync(pkgbits.SyncEOF)
}
@@ -3331,27 +3355,7 @@ func (r *reader) pkgDecls(target *ir.Package) {
target.Decls = append(target.Decls, method.Nname.(*ir.Name).Func)
case declVar:
- pos := r.pos()
names := r.pkgObjs(target)
- values := r.exprList()
-
- if len(names) > 1 && len(values) == 1 {
- as := ir.NewAssignListStmt(pos, ir.OAS2, nil, values)
- for _, name := range names {
- as.Lhs.Append(name)
- name.Defn = as
- }
- target.Decls = append(target.Decls, as)
- } else {
- for i, name := range names {
- as := ir.NewAssignStmt(pos, name, nil)
- if i < len(values) {
- as.Y = values[i]
- }
- name.Defn = as
- target.Decls = append(target.Decls, as)
- }
- }
if n := r.Len(); n > 0 {
assert(len(names) == 1)