mirror of
https://github.com/golang/go
synced 2024-11-19 01:54:39 -07:00
cmd/compile/internal/gc: simplify generating static data
Passes toolstash -cmp. Change-Id: I4a72e3e130c38868ee8ecef32cad58748aa5be52 Reviewed-on: https://go-review.googlesource.com/36353 Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
ad784caa74
commit
6ee8c6a7ce
@ -1349,22 +1349,7 @@ func isvaluelit(n *Node) bool {
|
||||
return n.Op == OARRAYLIT || n.Op == OSTRUCTLIT
|
||||
}
|
||||
|
||||
// gen_as_init attempts to emit static data for n and reports whether it succeeded.
|
||||
// If reportOnly is true, it does not emit static data and does not modify the AST.
|
||||
func gen_as_init(n *Node, reportOnly bool) bool {
|
||||
success := genAsInitNoCheck(n, reportOnly)
|
||||
if !success && n.IsStatic {
|
||||
Dump("\ngen_as_init", n)
|
||||
Fatalf("gen_as_init couldn't generate static data")
|
||||
}
|
||||
return success
|
||||
}
|
||||
|
||||
func genAsInitNoCheck(n *Node, reportOnly bool) bool {
|
||||
if !n.IsStatic {
|
||||
return false
|
||||
}
|
||||
|
||||
func genAsInitNoCheck(n *Node) bool {
|
||||
nr := n.Right
|
||||
nl := n.Left
|
||||
if nr == nil {
|
||||
@ -1412,7 +1397,6 @@ func genAsInitNoCheck(n *Node, reportOnly bool) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
if !reportOnly {
|
||||
nam.Xoffset += int64(array_array)
|
||||
gdata(&nam, ptr, Widthptr)
|
||||
|
||||
@ -1423,14 +1407,11 @@ func genAsInitNoCheck(n *Node, reportOnly bool) bool {
|
||||
|
||||
nam.Xoffset += int64(array_cap) - int64(array_nel)
|
||||
gdata(&nam, &nod1, Widthint)
|
||||
}
|
||||
|
||||
return true
|
||||
|
||||
case OLITERAL:
|
||||
if !reportOnly {
|
||||
gdata(&nam, nr, int(nr.Type.Width))
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
@ -643,9 +643,10 @@ func (s *state) stmt(n *Node) {
|
||||
|
||||
case OAS, OASWB:
|
||||
// Generate static data rather than code, if possible.
|
||||
if gen_as_init(n, true) {
|
||||
if !gen_as_init(n, false) {
|
||||
Fatalf("non-static data marked as static: %v\n\n", n)
|
||||
if n.IsStatic {
|
||||
if !genAsInitNoCheck(n) {
|
||||
Dump("\ngen_as_init", n)
|
||||
Fatalf("gen_as_init couldn't generate static data")
|
||||
}
|
||||
return
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user