Skip to content

Commit

Permalink
cmd/compile/internal/gc: clean up sinit.go
Browse files Browse the repository at this point in the history
The ctxt parameter is always set to 0 on entry into anylit so make this
parameter a literal constant, and where possibly remove ctxt as a parameter
where it is known to be a constant zero.

Change-Id: I3e76e06456d7b1a1ea875ffeb2efefa4a1ff5a7e
Reviewed-on: https://go-review.googlesource.com/28221
Run-TryBot: Dave Cheney <dave@cheney.net>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
  • Loading branch information
davecheney committed Sep 3, 2016
1 parent 7cbc105 commit 38abd43
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 54 deletions.
83 changes: 30 additions & 53 deletions src/cmd/compile/internal/gc/sinit.go
Original file line number Diff line number Diff line change
Expand Up @@ -860,9 +860,7 @@ func slicelit(ctxt int, n *Node, var_ *Node, init *Nodes) {
init.Append(a)
}

func maplit(ctxt int, n *Node, m *Node, init *Nodes) {
ctxt = 0

func maplit(n *Node, m *Node, init *Nodes) {
// make the map var
nerr := nerrors

Expand Down Expand Up @@ -894,8 +892,8 @@ func maplit(ctxt int, n *Node, m *Node, init *Nodes) {
dowidth(tv)

// make and initialize static arrays
vstatk := staticname(tk, ctxt)
vstatv := staticname(tv, ctxt)
vstatk := staticname(tk, 0)
vstatv := staticname(tv, 0)

b := int64(0)
for _, r := range n.List.Slice() {
Expand Down Expand Up @@ -1007,7 +1005,7 @@ func maplit(ctxt int, n *Node, m *Node, init *Nodes) {
}
}

func anylit(ctxt int, n *Node, var_ *Node, init *Nodes) {
func anylit(n *Node, var_ *Node, init *Nodes) {
t := n.Type
switch n.Op {
default:
Expand Down Expand Up @@ -1037,35 +1035,29 @@ func anylit(ctxt int, n *Node, var_ *Node, init *Nodes) {

var_ = Nod(OIND, var_, nil)
var_ = typecheck(var_, Erv|Easgn)
anylit(ctxt, n.Left, var_, init)
anylit(n.Left, var_, init)

case OSTRUCTLIT:
if !t.IsStruct() {
Fatalf("anylit: not struct")
}

if var_.isSimpleName() && n.List.Len() > 4 {
if ctxt == 0 {
// lay out static data
vstat := staticname(t, ctxt)

structlit(ctxt, 1, n, vstat, init)
// lay out static data
vstat := staticname(t, 0)

// copy static to var
a := Nod(OAS, var_, vstat)
structlit(0, 1, n, vstat, init)

a = typecheck(a, Etop)
a = walkexpr(a, init)
init.Append(a)
// copy static to var
a := Nod(OAS, var_, vstat)

// add expressions to automatic
structlit(ctxt, 2, n, var_, init)
a = typecheck(a, Etop)
a = walkexpr(a, init)
init.Append(a)

break
}
// add expressions to automatic
structlit(0, 2, n, var_, init)

structlit(ctxt, 1, n, var_, init)
structlit(ctxt, 2, n, var_, init)
break
}

Expand All @@ -1077,39 +1069,32 @@ func anylit(ctxt int, n *Node, var_ *Node, init *Nodes) {
init.Append(a)
}

structlit(ctxt, 3, n, var_, init)
structlit(0, 3, n, var_, init)

case OARRAYLIT:
if t.IsSlice() {
slicelit(ctxt, n, var_, init)
slicelit(0, n, var_, init)
break
}
if !t.IsArray() {
Fatalf("anylit: not array")
}

if var_.isSimpleName() && n.List.Len() > 4 {
if ctxt == 0 {
// lay out static data
vstat := staticname(t, ctxt)

arraylit(1, 1, n, vstat, init)
// lay out static data
vstat := staticname(t, 0)

// copy static to automatic
a := Nod(OAS, var_, vstat)
arraylit(1, 1, n, vstat, init)

a = typecheck(a, Etop)
a = walkexpr(a, init)
init.Append(a)

// add expressions to automatic
arraylit(ctxt, 2, n, var_, init)
// copy static to automatic
a := Nod(OAS, var_, vstat)
a = typecheck(a, Etop)
a = walkexpr(a, init)
init.Append(a)

break
}
// add expressions to automatic
arraylit(0, 2, n, var_, init)

arraylit(ctxt, 1, n, var_, init)
arraylit(ctxt, 2, n, var_, init)
break
}

Expand All @@ -1121,13 +1106,13 @@ func anylit(ctxt int, n *Node, var_ *Node, init *Nodes) {
init.Append(a)
}

arraylit(ctxt, 3, n, var_, init)
arraylit(0, 3, n, var_, init)

case OMAPLIT:
if !t.IsMap() {
Fatalf("anylit: not map")
}
maplit(ctxt, n, var_, init)
maplit(n, var_, init)
}
}

Expand All @@ -1149,14 +1134,6 @@ func oaslit(n *Node, init *Nodes) bool {
return false
}

// context is init() function.
// implies generated data executed
// exactly once and not subject to races.
ctxt := 0

// if(n->dodata == 1)
// ctxt = 1;

switch n.Right.Op {
default:
// not a special composit literal assignment
Expand All @@ -1167,7 +1144,7 @@ func oaslit(n *Node, init *Nodes) bool {
// not a special composit literal assignment
return false
}
anylit(ctxt, n.Right, n.Left, init)
anylit(n.Right, n.Left, init)
}

n.Op = OEMPTY
Expand Down
2 changes: 1 addition & 1 deletion src/cmd/compile/internal/gc/walk.go
Original file line number Diff line number Diff line change
Expand Up @@ -1647,7 +1647,7 @@ opswitch:
break
}
var_ := temp(n.Type)
anylit(0, n, var_, init)
anylit(n, var_, init)
n = var_

case OSEND:
Expand Down

0 comments on commit 38abd43

Please sign in to comment.