mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00: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
2 changed files with 14 additions and 32 deletions
|
|
@ -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,25 +1397,21 @@ func genAsInitNoCheck(n *Node, reportOnly bool) bool {
|
|||
return false
|
||||
}
|
||||
|
||||
if !reportOnly {
|
||||
nam.Xoffset += int64(array_array)
|
||||
gdata(&nam, ptr, Widthptr)
|
||||
nam.Xoffset += int64(array_array)
|
||||
gdata(&nam, ptr, Widthptr)
|
||||
|
||||
nam.Xoffset += int64(array_nel) - int64(array_array)
|
||||
var nod1 Node
|
||||
Nodconst(&nod1, Types[TINT], nr.Type.NumElem())
|
||||
gdata(&nam, &nod1, Widthint)
|
||||
nam.Xoffset += int64(array_nel) - int64(array_array)
|
||||
var nod1 Node
|
||||
Nodconst(&nod1, Types[TINT], nr.Type.NumElem())
|
||||
gdata(&nam, &nod1, Widthint)
|
||||
|
||||
nam.Xoffset += int64(array_cap) - int64(array_nel)
|
||||
gdata(&nam, &nod1, Widthint)
|
||||
}
|
||||
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))
|
||||
}
|
||||
gdata(&nam, nr, int(nr.Type.Width))
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue