Commit 922ce58d authored by Ian Lance Taylor's avatar Ian Lance Taylor

cmd/compile: change Func.Cvars to the new Nodes type

Update #14473.

Change-Id: Iba1ecf42d9ab5a93144941439d5cc6b0b4f4a3ac
Reviewed-on: https://go-review.googlesource.com/19992Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
parent 7da4cedd
......@@ -67,7 +67,7 @@ func closurebody(body *NodeList) *Node {
// ordinary ones in the symbol table; see oldname.
// unhook them.
// make the list of pointers for the closure call.
for _, v := range func_.Func.Cvars() {
for _, v := range func_.Func.Cvars.Slice() {
v.Name.Param.Closure.Name.Param.Closure = v.Name.Param.Outer
v.Name.Param.Outerexpr = oldname(v.Sym)
}
......@@ -76,7 +76,7 @@ func closurebody(body *NodeList) *Node {
}
func typecheckclosure(func_ *Node, top int) {
for _, ln := range func_.Func.Cvars() {
for _, ln := range func_.Func.Cvars.Slice() {
n := ln.Name.Param.Closure
if !n.Name.Captured {
n.Name.Captured = true
......@@ -224,7 +224,7 @@ func capturevars(xfunc *Node) {
func_ := xfunc.Func.Closure
func_.Func.Enter.Set(nil)
for _, v := range func_.Func.Cvars() {
for _, v := range func_.Func.Cvars.Slice() {
if v.Type == nil {
// if v->type is nil, it means v looked like it was
// going to be used in the closure but wasn't.
......@@ -306,7 +306,7 @@ func transformclosure(xfunc *Node) {
var addr *Node
var fld *Type
for _, v := range func_.Func.Cvars() {
for _, v := range func_.Func.Cvars.Slice() {
if v.Op == OXXX {
continue
}
......@@ -354,7 +354,7 @@ func transformclosure(xfunc *Node) {
offset := int64(Widthptr)
var addr *Node
var cv *Node
for _, v := range func_.Func.Cvars() {
for _, v := range func_.Func.Cvars.Slice() {
if v.Op == OXXX {
continue
}
......@@ -406,7 +406,7 @@ func transformclosure(xfunc *Node) {
func walkclosure(func_ *Node, init **NodeList) *Node {
// If no closure vars, don't bother wrapping.
if len(func_.Func.Cvars()) == 0 {
if len(func_.Func.Cvars.Slice()) == 0 {
return func_.Func.Closure.Func.Nname
}
......@@ -428,7 +428,7 @@ func walkclosure(func_ *Node, init **NodeList) *Node {
typ.List = list1(Nod(ODCLFIELD, newname(Lookup(".F")), typenod(Types[TUINTPTR])))
var typ1 *Node
for _, v := range func_.Func.Cvars() {
for _, v := range func_.Func.Cvars.Slice() {
if v.Op == OXXX {
continue
}
......
......@@ -426,7 +426,7 @@ func oldname(s *Sym) *Node {
n.Name.Param.Closure = c
c.Name.Param.Closure = n
c.Xoffset = 0
Curfn.Func.CvarAppend(c)
Curfn.Func.Cvars.Append(c)
}
// return ref to closure var, not original
......
......@@ -864,7 +864,7 @@ func esc(e *EscState, n *Node, up *Node) {
// Link addresses of captured variables to closure.
case OCLOSURE:
var a *Node
for _, v := range n.Func.Cvars() {
for _, v := range n.Func.Cvars.Slice() {
if v.Op == OXXX { // unnamed out argument; see dcl.go:/^funcargs
continue
}
......
......@@ -1137,7 +1137,7 @@ func orderexpr(np **Node, order *Order, lhs *Node) {
}
case OCLOSURE:
if n.Noescape && len(n.Func.Cvars()) > 0 {
if n.Noescape && len(n.Func.Cvars.Slice()) > 0 {
prealloc[n] = ordertemp(Types[TUINT8], order, false) // walk will fill in correct type
}
......
......@@ -475,7 +475,7 @@ func staticassign(l *Node, r *Node, out **NodeList) bool {
break
case OCLOSURE:
if len(r.Func.Cvars()) == 0 {
if len(r.Func.Cvars.Slice()) == 0 {
// Closures with no captured variables are globals,
// so the assignment can be done at link time.
n := *l
......
......@@ -151,7 +151,7 @@ type Func struct {
Shortname *Node
Enter Nodes
Exit Nodes
cvars *[]*Node // closure params
Cvars Nodes // closure params
Dcl []*Node // autodcl for this func/closure
Inldcl *[]*Node // copy of dcl for use in inlining
Closgen int
......@@ -177,27 +177,6 @@ type Func struct {
Needctxt bool // function uses context register (has closure variables)
}
// Cvars returns the closure variables for this Func.
// These are referenced variables that are defined in enclosing
// functions.
// The cvars field is a pointer to save space, since most Func values
// have no cvars.
func (f *Func) Cvars() []*Node {
if f.cvars == nil {
return nil
}
return *f.cvars
}
// AppendCvar appends a new closure variable.
func (f *Func) CvarAppend(n *Node) {
if f.cvars == nil {
f.cvars = &[]*Node{n}
} else {
*f.cvars = append(*f.cvars, n)
}
}
type Op uint8
// Node ops.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment