diff options
| author | Josh Bleecher Snyder <josharian@gmail.com> | 2016-03-13 17:06:10 -0700 |
|---|---|---|
| committer | Josh Bleecher Snyder <josharian@gmail.com> | 2016-03-16 22:21:02 +0000 |
| commit | 4e75932cf7148c6ed10f93bbc07a79a7f89e8bd2 (patch) | |
| tree | 1cff798dc585f54ae364b89b2453e4eceab4926f /src/cmd | |
| parent | e6ed3e8a46c7a066c8ead6429274fa65ba1f42ba (diff) | |
| download | go-4e75932cf7148c6ed10f93bbc07a79a7f89e8bd2.tar.xz | |
cmd/compile: make sinit consts Go-ish
Passes toolstash -cmp.
Change-Id: Ie11912a16d2cd54500e2f6e84316519b80e7c304
Reviewed-on: https://go-review.googlesource.com/20672
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/cmd')
| -rw-r--r-- | src/cmd/compile/internal/gc/sinit.go | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/src/cmd/compile/internal/gc/sinit.go b/src/cmd/compile/internal/gc/sinit.go index ac93478fc5..fa8666e095 100644 --- a/src/cmd/compile/internal/gc/sinit.go +++ b/src/cmd/compile/internal/gc/sinit.go @@ -525,37 +525,38 @@ func litas(l *Node, r *Node, init *Nodes) { init.Append(a) } +// initGenType is a bitmap indicating the types of generation that will occur for a static value. +type initGenType uint8 + const ( - MODEDYNAM = 1 - MODECONST = 2 + initDynamic initGenType = 1 << iota // contains some dynamic values, for which init code will be generated + initConst // contains some constant values, which may be written into data symbols ) -func getdyn(n *Node, top int) int { - mode := 0 +func getdyn(n *Node, top int) initGenType { switch n.Op { default: if isliteral(n) { - return MODECONST + return initConst } - return MODEDYNAM + return initDynamic case OARRAYLIT: if top == 0 && n.Type.Bound < 0 { - return MODEDYNAM + return initDynamic } - fallthrough case OSTRUCTLIT: - break } + + var mode initGenType for _, n1 := range n.List.Slice() { value := n1.Right mode |= getdyn(value, 0) - if mode == MODEDYNAM|MODECONST { + if mode == initDynamic|initConst { break } } - return mode } @@ -737,7 +738,7 @@ func slicelit(ctxt int, n *Node, var_ *Node, init *Nodes) { var vstat *Node mode := getdyn(n, 1) - if mode&MODECONST != 0 { + if mode&initConst != 0 { vstat = staticname(t, ctxt) arraylit(ctxt, 1, n, vstat, init) } |
