cmd/compile: add Nodes.Set1 method and use it where possible

Passes toolstash -cmp.

Change-Id: I05322fb5afd213f13fb247ec1a5f655c17a58774
Reviewed-on: https://go-review.googlesource.com/20522
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
diff --git a/src/cmd/compile/internal/gc/alg.go b/src/cmd/compile/internal/gc/alg.go
index 7c9d6ca..f61d029 100644
--- a/src/cmd/compile/internal/gc/alg.go
+++ b/src/cmd/compile/internal/gc/alg.go
@@ -206,7 +206,7 @@
 		n := Nod(ORANGE, nil, Nod(OIND, np, nil))
 		ni := newname(Lookup("i"))
 		ni.Type = Types[TINT]
-		n.List.Set([]*Node{ni})
+		n.List.Set1(ni)
 		n.Colas = true
 		colasdefn(n.List, n)
 		ni = n.List.First()
@@ -382,7 +382,7 @@
 
 		ni := newname(Lookup("i"))
 		ni.Type = Types[TINT]
-		nrange.List.Set([]*Node{ni})
+		nrange.List.Set1(ni)
 		nrange.Colas = true
 		colasdefn(nrange.List, nrange)
 		ni = nrange.List.First()
diff --git a/src/cmd/compile/internal/gc/bimport.go b/src/cmd/compile/internal/gc/bimport.go
index 58827c7..e6f76e7 100644
--- a/src/cmd/compile/internal/gc/bimport.go
+++ b/src/cmd/compile/internal/gc/bimport.go
@@ -636,7 +636,7 @@
 		// }
 		x := Nod(OCALL, p.typ().Nod, nil)
 		if p.bool() {
-			x.List.Set([]*Node{p.node()})
+			x.List.Set1(p.node())
 		} else {
 			x.List.Set(p.nodeList())
 		}
diff --git a/src/cmd/compile/internal/gc/closure.go b/src/cmd/compile/internal/gc/closure.go
index aae41d4..5c43613 100644
--- a/src/cmd/compile/internal/gc/closure.go
+++ b/src/cmd/compile/internal/gc/closure.go
@@ -425,7 +425,7 @@
 
 	typ := Nod(OTSTRUCT, nil, nil)
 
-	typ.List.Set([]*Node{Nod(ODCLFIELD, newname(Lookup(".F")), typenod(Types[TUINTPTR]))})
+	typ.List.Set1(Nod(ODCLFIELD, newname(Lookup(".F")), typenod(Types[TUINTPTR])))
 	var typ1 *Node
 	for _, v := range func_.Func.Cvars.Slice() {
 		if v.Op == OXXX {
@@ -606,7 +606,7 @@
 	} else {
 		n := Nod(OAS2, nil, nil)
 		n.List.Set(retargs)
-		n.Rlist.Set([]*Node{call})
+		n.Rlist.Set1(call)
 		body = append(body, n)
 		n = Nod(ORETURN, nil, nil)
 		body = append(body, n)
@@ -639,13 +639,13 @@
 	}
 
 	typ := Nod(OTSTRUCT, nil, nil)
-	typ.List.Set([]*Node{Nod(ODCLFIELD, newname(Lookup("F")), typenod(Types[TUINTPTR]))})
+	typ.List.Set1(Nod(ODCLFIELD, newname(Lookup("F")), typenod(Types[TUINTPTR])))
 	typ.List.Append(Nod(ODCLFIELD, newname(Lookup("R")), typenod(n.Left.Type)))
 
 	clos := Nod(OCOMPLIT, nil, Nod(OIND, typ, nil))
 	clos.Esc = n.Esc
 	clos.Right.Implicit = true
-	clos.List.Set([]*Node{Nod(OCFUNC, n.Func.Nname, nil)})
+	clos.List.Set1(Nod(OCFUNC, n.Func.Nname, nil))
 	clos.List.Append(n.Left)
 
 	// Force type conversion from *struct to the func type.
diff --git a/src/cmd/compile/internal/gc/dcl.go b/src/cmd/compile/internal/gc/dcl.go
index 179b7fb..4b6333a 100644
--- a/src/cmd/compile/internal/gc/dcl.go
+++ b/src/cmd/compile/internal/gc/dcl.go
@@ -228,7 +228,7 @@
 		e := el[0]
 		as2 := Nod(OAS2, nil, nil)
 		as2.List.Set(vl)
-		as2.Rlist.Set([]*Node{e})
+		as2.Rlist.Set1(e)
 		for _, v := range vl {
 			v.Op = ONAME
 			declare(v, dclcontext)
diff --git a/src/cmd/compile/internal/gc/init.go b/src/cmd/compile/internal/gc/init.go
index 32eda0f..0424e47 100644
--- a/src/cmd/compile/internal/gc/init.go
+++ b/src/cmd/compile/internal/gc/init.go
@@ -122,7 +122,7 @@
 	a.Likely = 1
 	r = append(r, a)
 	// (3a)
-	a.Nbody.Set([]*Node{Nod(ORETURN, nil, nil)})
+	a.Nbody.Set1(Nod(ORETURN, nil, nil))
 
 	// (4)
 	b := Nod(OIF, nil, nil)
@@ -132,7 +132,7 @@
 	b.Likely = 1
 	r = append(r, b)
 	// (4a)
-	b.Nbody.Set([]*Node{Nod(OCALL, syslook("throwinit"), nil)})
+	b.Nbody.Set1(Nod(OCALL, syslook("throwinit"), nil))
 
 	// (6)
 	a = Nod(OAS, gatevar, Nodintconst(1))
diff --git a/src/cmd/compile/internal/gc/order.go b/src/cmd/compile/internal/gc/order.go
index 3d7dcb3..1e46e44 100644
--- a/src/cmd/compile/internal/gc/order.go
+++ b/src/cmd/compile/internal/gc/order.go
@@ -346,7 +346,7 @@
 
 	as := Nod(OAS2, nil, nil)
 	as.List.Set(l1)
-	as.Rlist.Set([]*Node{n})
+	as.Rlist.Set1(n)
 	typecheck(&as, Etop)
 	orderstmt(as, order)
 
@@ -883,7 +883,7 @@
 							n2.Ninit.Append(tmp2)
 						}
 
-						r.List.Set([]*Node{ordertemp(tmp1.Type, order, false)})
+						r.List.Set1(ordertemp(tmp1.Type, order, false))
 						tmp2 = Nod(OAS, tmp1, r.List.First())
 						typecheck(&tmp2, Etop)
 						n2.Ninit.Append(tmp2)
diff --git a/src/cmd/compile/internal/gc/parser.go b/src/cmd/compile/internal/gc/parser.go
index 183b743..fc97b9a 100644
--- a/src/cmd/compile/internal/gc/parser.go
+++ b/src/cmd/compile/internal/gc/parser.go
@@ -726,7 +726,7 @@
 					// type switch - declare variable
 					nn := newname(n.Sym)
 					declare(nn, dclcontext)
-					stmt.Rlist.Set([]*Node{nn})
+					stmt.Rlist.Set1(nn)
 
 					// keep track of the instances for reporting unused
 					nn.Name.Defn = tswitch
@@ -752,9 +752,9 @@
 			} else {
 				n = Nod(OAS2, nil, nil)
 				n.List.Set(cases)
-				n.Rlist.Set([]*Node{rhs})
+				n.Rlist.Set1(rhs)
 			}
-			stmt.List.Set([]*Node{n})
+			stmt.List.Set1(n)
 
 			p.want(':') // consume ':' after declaring select cases for correct lineno
 			return stmt
@@ -770,7 +770,7 @@
 			// done in casebody()
 			markdcl() // matching popdcl in caseblock
 			stmt := Nod(OXCASE, nil, nil)
-			stmt.List.Set([]*Node{colas(cases, []*Node{rhs}, lno)})
+			stmt.List.Set1(colas(cases, []*Node{rhs}, lno))
 
 			p.want(':') // consume ':' after declaring select cases for correct lineno
 			return stmt
@@ -794,7 +794,7 @@
 				// type switch - declare variable
 				nn := newname(n.Sym)
 				declare(nn, dclcontext)
-				stmt.Rlist.Set([]*Node{nn})
+				stmt.Rlist.Set1(nn)
 
 				// keep track of the instances for reporting unused
 				nn.Name.Defn = tswitch
@@ -918,7 +918,7 @@
 		}
 		h := Nod(OFOR, nil, nil)
 		if init != nil {
-			h.Ninit.Set([]*Node{init})
+			h.Ninit.Set1(init)
 		}
 		h.Left = cond
 		h.Right = post
@@ -1022,7 +1022,7 @@
 	init, cond, _ := p.header(false)
 	h := Nod(OIF, nil, nil)
 	if init != nil {
-		h.Ninit.Set([]*Node{init})
+		h.Ninit.Set1(init)
 	}
 	h.Left = cond
 	return h
@@ -1047,13 +1047,13 @@
 
 	if p.got(LELSE) {
 		if p.tok == LIF {
-			stmt.Rlist.Set([]*Node{p.if_stmt()})
+			stmt.Rlist.Set1(p.if_stmt())
 		} else {
 			cs := p.compound_stmt(true)
 			if cs.Op == OBLOCK && cs.Ninit.Len() == 0 {
 				stmt.Rlist.Set(cs.List.Slice())
 			} else {
-				stmt.Rlist.Set([]*Node{cs})
+				stmt.Rlist.Set1(cs)
 			}
 		}
 	}
diff --git a/src/cmd/compile/internal/gc/range.go b/src/cmd/compile/internal/gc/range.go
index 8264d2a..d4df16b 100644
--- a/src/cmd/compile/internal/gc/range.go
+++ b/src/cmd/compile/internal/gc/range.go
@@ -95,7 +95,7 @@
 	// present."
 	if isblank(v2) {
 		if v1 != nil {
-			n.List.Set([]*Node{v1})
+			n.List.Set1(v1)
 		}
 		v2 = nil
 	}
@@ -216,7 +216,7 @@
 			tmp.Right.Typecheck = 1
 			a = Nod(OAS, hp, tmp)
 			typecheck(&a, Etop)
-			n.Right.Ninit.Set([]*Node{a})
+			n.Right.Ninit.Set1(a)
 		}
 
 		// orderstmt allocated the iterator for us.
@@ -273,8 +273,8 @@
 		a := Nod(OAS2RECV, nil, nil)
 		a.Typecheck = 1
 		a.List.Set([]*Node{hv1, hb})
-		a.Rlist.Set([]*Node{Nod(ORECV, ha, nil)})
-		n.Left.Ninit.Set([]*Node{a})
+		a.Rlist.Set1(Nod(ORECV, ha, nil))
+		n.Left.Ninit.Set1(a)
 		if v1 == nil {
 			body = nil
 		} else {
@@ -299,7 +299,7 @@
 			a = Nod(OAS2, nil, nil)
 			a.List.Set([]*Node{hv1, hv2})
 			fn := syslook("stringiter2")
-			a.Rlist.Set([]*Node{mkcall1(fn, fn.Type.Results(), nil, ha, hv1)})
+			a.Rlist.Set1(mkcall1(fn, fn.Type.Results(), nil, ha, hv1))
 		}
 
 		n.Left = Nod(ONE, hv1, Nodintconst(0))
diff --git a/src/cmd/compile/internal/gc/select.go b/src/cmd/compile/internal/gc/select.go
index 76ca399..4f63788 100644
--- a/src/cmd/compile/internal/gc/select.go
+++ b/src/cmd/compile/internal/gc/select.go
@@ -63,7 +63,7 @@
 
 				n.Op = OSELRECV2
 				n.Left = n.List.First()
-				n.List.Set([]*Node{n.List.Second()})
+				n.List.Set1(n.List.Second())
 				n.Right = n.Rlist.First()
 				n.Rlist.Set(nil)
 
@@ -101,7 +101,7 @@
 	var var_ *Node
 	var selv *Node
 	if i == 0 {
-		sel.Nbody.Set([]*Node{mkcall("block", nil, nil)})
+		sel.Nbody.Set1(mkcall("block", nil, nil))
 		goto out
 	}
 
@@ -143,7 +143,7 @@
 
 				n.Op = OAS2
 				n.List.Set(append([]*Node{n.Left}, n.List.Slice()...))
-				n.Rlist.Set([]*Node{n.Right})
+				n.Rlist.Set1(n.Right)
 				n.Right = nil
 				n.Left = nil
 				n.Typecheck = 0
@@ -156,7 +156,7 @@
 			a.Left = Nod(OEQ, ch, nodnil())
 			var ln Nodes
 			ln.Set(l)
-			a.Nbody.Set([]*Node{mkcall("block", nil, &ln)})
+			a.Nbody.Set1(mkcall("block", nil, &ln))
 			l = ln.Slice()
 			typecheck(&a, Etop)
 			l = append(l, a)
@@ -245,7 +245,7 @@
 		typecheck(&r.Left, Erv)
 		r.Nbody.Set(cas.Nbody.Slice())
 		r.Rlist.Set(append(dflt.Ninit.Slice(), dflt.Nbody.Slice()...))
-		sel.Nbody.Set([]*Node{r})
+		sel.Nbody.Set1(r)
 		goto out
 	}
 
diff --git a/src/cmd/compile/internal/gc/sinit.go b/src/cmd/compile/internal/gc/sinit.go
index aa809ec..6edfe53 100644
--- a/src/cmd/compile/internal/gc/sinit.go
+++ b/src/cmd/compile/internal/gc/sinit.go
@@ -778,7 +778,7 @@
 		a = Nod(OADDR, a, nil)
 	} else {
 		a = Nod(ONEW, nil, nil)
-		a.List.Set([]*Node{typenod(t)})
+		a.List.Set1(typenod(t))
 	}
 
 	a = Nod(OAS, vauto, a)
@@ -850,7 +850,7 @@
 	nerr := nerrors
 
 	a := Nod(OMAKE, nil, nil)
-	a.List.Set([]*Node{typenod(n.Type)})
+	a.List.Set1(typenod(n.Type))
 	litas(var_, a, init)
 
 	// count the initializers
@@ -952,9 +952,9 @@
 		r = Nod(OAS, r, a)
 
 		a = Nod(OFOR, nil, nil)
-		a.Nbody.Set([]*Node{r})
+		a.Nbody.Set1(r)
 
-		a.Ninit.Set([]*Node{Nod(OAS, index, Nodintconst(0))})
+		a.Ninit.Set1(Nod(OAS, index, Nodintconst(0)))
 		a.Left = Nod(OLT, index, Nodintconst(tarr.Bound))
 		a.Right = Nod(OAS, index, Nod(OADD, index, Nodintconst(1)))
 
diff --git a/src/cmd/compile/internal/gc/subr.go b/src/cmd/compile/internal/gc/subr.go
index bf4c172..84836d3 100644
--- a/src/cmd/compile/internal/gc/subr.go
+++ b/src/cmd/compile/internal/gc/subr.go
@@ -2002,7 +2002,7 @@
 		l = append(l, nodlit(v)) // method name
 		call := Nod(OCALL, syslook("panicwrap"), nil)
 		call.List.Set(l)
-		n.Nbody.Set([]*Node{call})
+		n.Nbody.Set1(call)
 		fn.Nbody.Append(n)
 	}
 
@@ -2029,7 +2029,7 @@
 		call.Isddd = isddd
 		if method.Type.Outtuple > 0 {
 			n := Nod(ORETURN, nil, nil)
-			n.List.Set([]*Node{call})
+			n.List.Set1(call)
 			call = n
 		}
 
diff --git a/src/cmd/compile/internal/gc/swt.go b/src/cmd/compile/internal/gc/swt.go
index 054fee3..267ec9a 100644
--- a/src/cmd/compile/internal/gc/swt.go
+++ b/src/cmd/compile/internal/gc/swt.go
@@ -305,7 +305,7 @@
 				a.Left = Nod(ONOT, n.Left, nil) // if !val
 				typecheck(&a.Left, Erv)
 			}
-			a.Nbody.Set([]*Node{n.Right}) // goto l
+			a.Nbody.Set1(n.Right) // goto l
 
 			cas = append(cas, a)
 			lineno = lno
@@ -327,8 +327,8 @@
 		a.Left = le
 	}
 	typecheck(&a.Left, Erv)
-	a.Nbody.Set([]*Node{s.walkCases(cc[:half])})
-	a.Rlist.Set([]*Node{s.walkCases(cc[half:])})
+	a.Nbody.Set1(s.walkCases(cc[:half]))
+	a.Rlist.Set1(s.walkCases(cc[half:]))
 	return a
 }
 
@@ -581,11 +581,11 @@
 	i.Left = Nod(OEQ, typ, nodnil())
 	if typenil != nil {
 		// Do explicit nil case right here.
-		i.Nbody.Set([]*Node{typenil})
+		i.Nbody.Set1(typenil)
 	} else {
 		// Jump to default case.
 		lbl := newCaseLabel()
-		i.Nbody.Set([]*Node{Nod(OGOTO, lbl, nil)})
+		i.Nbody.Set1(Nod(OGOTO, lbl, nil))
 		// Wrap default case with label.
 		blk := Nod(OBLOCK, nil, nil)
 		blk.List.Set([]*Node{Nod(OLABEL, lbl, nil), def})
@@ -694,13 +694,13 @@
 	a.List.Set([]*Node{name, s.okname}) // name, ok =
 	b := Nod(ODOTTYPE, s.facename, nil)
 	b.Type = t.Left.Type // interface.(type)
-	a.Rlist.Set([]*Node{b})
+	a.Rlist.Set1(b)
 	typecheck(&a, Etop)
 	init = append(init, a)
 
 	c := Nod(OIF, nil, nil)
 	c.Left = s.okname
-	c.Nbody.Set([]*Node{t.Right}) // if ok { goto l }
+	c.Nbody.Set1(t.Right) // if ok { goto l }
 
 	return liststmt(append(init, c))
 }
@@ -717,7 +717,7 @@
 			a := Nod(OIF, nil, nil)
 			a.Left = Nod(OEQ, s.hashname, Nodintconst(int64(c.hash)))
 			typecheck(&a.Left, Erv)
-			a.Nbody.Set([]*Node{n.Right})
+			a.Nbody.Set1(n.Right)
 			cas = append(cas, a)
 		}
 		return liststmt(cas)
@@ -728,8 +728,8 @@
 	a := Nod(OIF, nil, nil)
 	a.Left = Nod(OLE, s.hashname, Nodintconst(int64(cc[half-1].hash)))
 	typecheck(&a.Left, Erv)
-	a.Nbody.Set([]*Node{s.walkCases(cc[:half])})
-	a.Rlist.Set([]*Node{s.walkCases(cc[half:])})
+	a.Nbody.Set1(s.walkCases(cc[:half]))
+	a.Rlist.Set1(s.walkCases(cc[half:]))
 	return a
 }
 
diff --git a/src/cmd/compile/internal/gc/syntax.go b/src/cmd/compile/internal/gc/syntax.go
index 1c38c43..6bc795b 100644
--- a/src/cmd/compile/internal/gc/syntax.go
+++ b/src/cmd/compile/internal/gc/syntax.go
@@ -411,6 +411,11 @@
 	}
 }
 
+// Set1 sets n to a slice containing a single node.
+func (n *Nodes) Set1(node *Node) {
+	n.slice = &[]*Node{node}
+}
+
 // MoveNodes sets n to the contents of n2, then clears n2.
 func (n *Nodes) MoveNodes(n2 *Nodes) {
 	n.slice = n2.slice
diff --git a/src/cmd/compile/internal/gc/typecheck.go b/src/cmd/compile/internal/gc/typecheck.go
index 6d52ece..45bb160 100644
--- a/src/cmd/compile/internal/gc/typecheck.go
+++ b/src/cmd/compile/internal/gc/typecheck.go
@@ -706,7 +706,7 @@
 				if l.Op == OADDSTR {
 					n.List.Set(l.List.Slice())
 				} else {
-					n.List.Set([]*Node{l})
+					n.List.Set1(l)
 				}
 				if r.Op == OADDSTR {
 					n.List.AppendNodes(&r.List)
diff --git a/src/cmd/compile/internal/gc/walk.go b/src/cmd/compile/internal/gc/walk.go
index 89722a9..0825442 100644
--- a/src/cmd/compile/internal/gc/walk.go
+++ b/src/cmd/compile/internal/gc/walk.go
@@ -878,7 +878,7 @@
 		if !isblank(n.List.Second()) {
 			r.Type.Type.Down.Type = n.List.Second().Type
 		}
-		n.Rlist.Set([]*Node{r})
+		n.Rlist.Set1(r)
 		n.Op = OAS2FUNC
 
 		// don't generate a = *var if a is _
@@ -1048,7 +1048,7 @@
 
 				n2 := Nod(OIF, nil, nil)
 				n2.Left = Nod(OEQ, l, nodnil())
-				n2.Nbody.Set([]*Node{Nod(OAS, l, n1)})
+				n2.Nbody.Set1(Nod(OAS, l, n1))
 				n2.Likely = -1
 				typecheck(&n2, Etop)
 				init.Append(n2)
@@ -2808,7 +2808,9 @@
 	nif := Nod(OIF, nil, nil)
 
 	// n := len(s) + len(l2) - cap(s)
-	nif.Ninit.Set([]*Node{Nod(OAS, nt, Nod(OSUB, Nod(OADD, Nod(OLEN, s, nil), Nod(OLEN, l2, nil)), Nod(OCAP, s, nil)))})
+	nif.Ninit.Set1(Nod(OAS, nt, Nod(OSUB,
+		Nod(OADD, Nod(OLEN, s, nil), Nod(OLEN, l2, nil)),
+		Nod(OCAP, s, nil))))
 
 	nif.Left = Nod(OGT, nt, Nodintconst(0))
 
@@ -2817,7 +2819,7 @@
 	substArgTypes(&fn, s.Type.Type, s.Type.Type)
 
 	// s = growslice_n(T, s, n)
-	nif.Nbody.Set([]*Node{Nod(OAS, s, mkcall1(fn, s.Type, &nif.Ninit, typename(s.Type), s, nt))})
+	nif.Nbody.Set1(Nod(OAS, s, mkcall1(fn, s.Type, &nif.Ninit, typename(s.Type), s, nt)))
 
 	l = append(l, nif)
 
@@ -2953,7 +2955,9 @@
 	fn := syslook("growslice") //   growslice(<type>, old []T, mincap int) (ret []T)
 	substArgTypes(&fn, ns.Type.Type, ns.Type.Type)
 
-	nx.Nbody.Set([]*Node{Nod(OAS, ns, mkcall1(fn, ns.Type, &nx.Ninit, typename(ns.Type), ns, Nod(OADD, Nod(OLEN, ns, nil), na)))})
+	nx.Nbody.Set1(Nod(OAS, ns,
+		mkcall1(fn, ns.Type, &nx.Ninit, typename(ns.Type), ns,
+			Nod(OADD, Nod(OLEN, ns, nil), na))))
 
 	l = append(l, nx)
 
@@ -3960,7 +3964,7 @@
 	typecheck(&a, Etop)
 	walkstmt(&a)
 
-	fn.Nbody.Set([]*Node{a})
+	fn.Nbody.Set1(a)
 
 	funcbody(fn)