diff options
| author | Matthew Dempsky <mdempsky@google.com> | 2023-08-09 01:43:47 -0700 |
|---|---|---|
| committer | Matthew Dempsky <mdempsky@google.com> | 2023-08-11 17:45:02 +0000 |
| commit | 832212df9aba985bdc6a8378a821e1030554fa2f (patch) | |
| tree | 3ff8809afe792650337c1530acca744836c1fb3d /src/cmd/compile/internal/noder/reader.go | |
| parent | 673d64ac7009b41c55b90b33ca346a86351959ee (diff) | |
| download | go-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.go | 44 |
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) |
