Convert Embedded, Method, and Colas to bools.
I believe that this is the last of the Node fields
that can be trivially converted to bools.
No functional changes. Passes toolstash -cmp.
Change-Id: I81962ee47866596341fc60d24d6959c20cd7fc1c
Reviewed-on: https://go-review.googlesource.com/8440
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
l := n.Left
var t1 gc.Node
- if l.Addable == 0 {
+ if !l.Addable {
gc.Tempname(&t1, l.Type)
gc.Cgen(l, &t1)
l = &t1
// setup for binary operators
r := n.Right
- if r != nil && r.Addable == 0 {
+ if r != nil && !r.Addable {
var t2 gc.Node
gc.Tempname(&t2, r.Type)
gc.Cgen(r, &t2)
var oary [10]int64
var nn *gc.Node
o := gc.Dotoffset(n, oary[:], &nn)
- if nn != nil && nn.Addable != 0 && o == 1 && oary[0] >= 0 {
+ if nn != nil && nn.Addable && o == 1 && oary[0] >= 0 {
*n1 = *nn
n1.Type = n.Type
n1.Xoffset += oary[0]
return false
}
- if nn.Addable != 0 && o == 1 && oary[0] >= 0 {
+ if nn.Addable && o == 1 && oary[0] >= 0 {
// directly addressable set of DOTs
n1 := *nn
return false
}
- if nn.Addable != 0 && o == 1 && oary[0] >= 0 {
+ if nn.Addable && o == 1 && oary[0] >= 0 {
// directly addressable set of DOTs
n1 := *nn
*/
func igenindex(n *gc.Node, res *gc.Node, bounded bool) *obj.Prog {
if !gc.Is64(n.Type) {
- if n.Addable != 0 {
+ if n.Addable {
// nothing to do.
*res = *n
} else {
gc.Tempname(&tsrc, gc.Types[gc.Tptr])
var tdst gc.Node
gc.Tempname(&tdst, gc.Types[gc.Tptr])
- if n.Addable == 0 {
+ if !n.Addable {
gc.Agen(n, &tsrc)
}
- if res.Addable == 0 {
+ if !res.Addable {
gc.Agen(res, &tdst)
}
- if n.Addable != 0 {
+ if n.Addable {
gc.Agen(n, &src)
} else {
gmove(&tsrc, &src)
gc.Gvardef(res)
}
- if res.Addable != 0 {
+ if res.Addable {
gc.Agen(res, &dst)
} else {
gmove(&tdst, &dst)
l := n.Left
r := n.Right
- if l.Addable == 0 {
+ if !l.Addable {
var t1 gc.Node
gc.Tempname(&t1, l.Type)
gc.Cgen(l, &t1)
l = &t1
}
- if r != nil && r.Addable == 0 {
+ if r != nil && !r.Addable {
var t2 gc.Node
gc.Tempname(&t2, r.Type)
gc.Cgen(r, &t2)
// binary
if nl.Ullman >= nr.Ullman {
gc.Cgen(nl, &f0)
- if nr.Addable != 0 {
+ if nr.Addable {
gins(foptoas(int(n.Op), n.Type, 0), nr, &f0)
} else {
gc.Cgen(nr, &f0)
}
} else {
gc.Cgen(nr, &f0)
- if nl.Addable != 0 {
+ if nl.Addable {
gins(foptoas(int(n.Op), n.Type, Frev), nl, &f0)
} else {
gc.Cgen(nl, &f0)
var n2 gc.Node
var ax gc.Node
if !gc.Thearch.Use387 {
- if nl.Addable == 0 {
+ if !nl.Addable {
var n1 gc.Node
gc.Tempname(&n1, nl.Type)
gc.Cgen(nl, &n1)
nl = &n1
}
- if nr.Addable == 0 {
+ if !nr.Addable {
var tmp gc.Node
gc.Tempname(&tmp, nr.Type)
gc.Cgen(nr, &tmp)
var oary [10]int64
var nn *gc.Node
o := gc.Dotoffset(n, oary[:], &nn)
- if nn != nil && nn.Addable != 0 && o == 1 && oary[0] >= 0 {
+ if nn != nil && nn.Addable && o == 1 && oary[0] >= 0 {
*n1 = *nn
n1.Type = n.Type
n1.Xoffset += oary[0]
switch n.Op {
case OSLICE, OSLICEARR, OSLICESTR, OSLICE3, OSLICE3ARR:
- if res.Op != ONAME || res.Addable == 0 {
+ if res.Op != ONAME || !res.Addable {
var n1 Node
Tempname(&n1, n.Type)
Cgen_slice(n, &n1)
return
case OEFACE:
- if res.Op != ONAME || res.Addable == 0 {
+ if res.Op != ONAME || !res.Addable {
var n1 Node
Tempname(&n1, n.Type)
Cgen_eface(n, &n1)
return
}
- if res.Addable == 0 {
+ if !res.Addable {
if n.Ullman > res.Ullman {
if Ctxt.Arch.Regsize == 4 && Is64(n.Type) {
var n1 Node
if Ctxt.Arch.Thechar == '5' { // TODO(rsc): Maybe more often?
// if both are addressable, move
- if n.Addable != 0 && res.Addable != 0 {
+ if n.Addable && res.Addable {
if Is64(n.Type) || Is64(res.Type) || n.Op == OREGISTER || res.Op == OREGISTER || Iscomplex[n.Type.Etype] || Iscomplex[res.Type.Etype] {
Thearch.Gmove(n, res)
} else {
}
// if both are not addressable, use a temporary.
- if n.Addable == 0 && res.Addable == 0 {
+ if !n.Addable && !res.Addable {
// could use regalloc here sometimes,
// but have to check for ullman >= UINF.
var n1 Node
// if result is not addressable directly but n is,
// compute its address and then store via the address.
- if res.Addable == 0 {
+ if !res.Addable {
var n1 Node
Igen(res, &n1, nil)
Cgen(n, &n1)
return
}
- if (Ctxt.Arch.Thechar == '6' || Ctxt.Arch.Thechar == '8') && n.Addable != 0 {
+ if (Ctxt.Arch.Thechar == '6' || Ctxt.Arch.Thechar == '8') && n.Addable {
Thearch.Gmove(n, res)
return
}
if Ctxt.Arch.Thechar == '7' || Ctxt.Arch.Thechar == '9' {
// if both are addressable, move
- if n.Addable != 0 {
+ if n.Addable {
if n.Op == OREGISTER || res.Op == OREGISTER {
Thearch.Gmove(n, res)
} else {
var n1 Node
var n2 Node
if Ctxt.Arch.Thechar == '5' {
- if nl.Addable != 0 && !Is64(nl.Type) {
+ if nl.Addable && !Is64(nl.Type) {
Regalloc(&n1, nl.Type, res)
Thearch.Gmove(nl, &n1)
} else {
func Mgen(n *Node, n1 *Node, rg *Node) {
n1.Op = OEMPTY
- if n.Addable != 0 {
+ if n.Addable {
*n1 = *n
if n1.Op == OREGISTER || n1.Op == OINDREG {
reg[n.Val.U.Reg-int16(Thearch.REGMIN)]++
Fatal("cgenr on fat node")
}
- if n.Addable != 0 {
+ if n.Addable {
Regalloc(a, n.Type, res)
Thearch.Gmove(n, a)
return
bounded := Debug['B'] != 0 || n.Bounded
var n1 Node
var n3 Node
- if nr.Addable != 0 {
+ if nr.Addable {
var tmp Node
if !Isconst(nr, CTINT) {
Tempname(&tmp, Types[TINT32])
Regalloc(&n1, tmp.Type, nil)
Thearch.Gmove(&tmp, &n1)
}
- } else if nl.Addable != 0 {
+ } else if nl.Addable {
if !Isconst(nr, CTINT) {
var tmp Node
Tempname(&tmp, Types[TINT32])
var n3 Node
var tmp Node
var n1 Node
- if nr.Addable != 0 {
+ if nr.Addable {
// Generate &nl first, and move nr into register.
if !Isconst(nl, CTSTR) {
Igen(nl, &n3, res)
Regalloc(&n1, tmp.Type, nil)
Thearch.Gmove(&tmp, &n1)
}
- } else if nl.Addable != 0 {
+ } else if nl.Addable {
// Generate nr first, and move &nl into register.
if !Isconst(nr, CTINT) {
p2 = Thearch.Igenindex(nr, &tmp, bounded)
var nlen Node
var tmp Node
var n1 Node
- if nr.Addable != 0 {
+ if nr.Addable {
goto irad
}
- if nl.Addable != 0 {
+ if nl.Addable {
Cgenr(nr, &n1, nil)
if !Isconst(nl, CTSTR) {
if Isfixedarray(nl.Type) {
if Isfixedarray(nl.Type) {
Agenr(nl, &n3, res)
} else {
- if nl.Addable == 0 {
+ if !nl.Addable {
if res != nil && res.Op == OREGISTER { // give up res, which we don't need yet.
Regfree(res)
}
return
}
- if n.Addable != 0 {
+ if n.Addable {
if n.Op == OREGISTER {
Fatal("agen OREGISTER")
}
*a = Node{}
a.Op = OINDREG
a.Val.U.Reg = int16(Thearch.REGSP)
- a.Addable = 1
+ a.Addable = true
a.Xoffset = fp.Width
if HasLinkRegister() {
a.Xoffset += int64(Ctxt.Arch.Ptrsize)
return
case ONAME:
- if n.Addable == 0 || Ctxt.Arch.Thechar == '5' || Ctxt.Arch.Thechar == '7' || Ctxt.Arch.Thechar == '9' {
+ if !n.Addable || Ctxt.Arch.Thechar == '5' || Ctxt.Arch.Thechar == '7' || Ctxt.Arch.Thechar == '9' {
goto def
}
var n1 Node
}
if Ctxt.Arch.Regsize == 4 && Is64(nr.Type) {
- if nl.Addable == 0 || Isconst(nl, CTINT) {
+ if !nl.Addable || Isconst(nl, CTINT) {
var n1 Node
Tempname(&n1, nl.Type)
Cgen(nl, &n1)
nl = &n1
}
- if nr.Addable == 0 {
+ if !nr.Addable {
var n2 Node
Tempname(&n2, nr.Type)
Cgen(nr, &n2)
goto cmp
}
- if nl.Addable == 0 && Ctxt.Arch.Thechar == '8' {
+ if !nl.Addable && Ctxt.Arch.Thechar == '8' {
Tempname(&n1, nl.Type)
} else {
Regalloc(&n1, nl.Type, nil)
break
}
- if nr.Addable == 0 && Ctxt.Arch.Thechar == '8' {
+ if !nr.Addable && Ctxt.Arch.Thechar == '8' {
var tmp Node
Tempname(&tmp, nr.Type)
Cgen(nr, &tmp)
i = i.Left // interface
- if i.Addable == 0 {
+ if !i.Addable {
var tmpi Node
Tempname(&tmpi, i.Type)
Cgen(i, &tmpi)
}
// call direct
- n.Left.Method = 1
+ n.Left.Method = true
Ginscall(n.Left, proc)
}
var nod Node
nod.Op = OINDREG
nod.Val.U.Reg = int16(Thearch.REGSP)
- nod.Addable = 1
+ nod.Addable = true
nod.Xoffset = fp.Width
if HasLinkRegister() {
var nod1 Node
nod1.Op = OINDREG
nod1.Val.U.Reg = int16(Thearch.REGSP)
- nod1.Addable = 1
+ nod1.Addable = true
nod1.Xoffset = fp.Width
if HasLinkRegister() {
nod1.Xoffset += int64(Ctxt.Arch.Ptrsize)
ptr := Nod(ONAME, nil, nil)
ptr.Sym = Lookup("rcvr")
ptr.Class = PAUTO
- ptr.Addable = 1
+ ptr.Addable = true
ptr.Ullman = 1
ptr.Used = true
ptr.Curfn = xfunc
// make both sides addable in ullman order
if nr != nil {
- if nl.Ullman > nr.Ullman && nl.Addable == 0 {
+ if nl.Ullman > nr.Ullman && !nl.Addable {
Tempname(&tnl, nl.Type)
Cgen(nl, &tnl)
nl = &tnl
}
- if nr.Addable == 0 {
+ if !nr.Addable {
var tnr Node
Tempname(&tnr, nr.Type)
Cgen(nr, &tnr)
}
}
- if nl.Addable == 0 {
+ if !nl.Addable {
Tempname(&tnl, nl.Type)
Cgen(nl, &tnl)
nl = &tnl
// break addable nc-complex into nr-real and ni-imaginary
func subnode(nr *Node, ni *Node, nc *Node) {
- if nc.Addable == 0 {
+ if !nc.Addable {
Fatal("subnode not addable")
}
func nodfconst(n *Node, t *Type, fval *Mpflt) {
*n = Node{}
n.Op = OLITERAL
- n.Addable = 1
+ n.Addable = true
ullmancalc(n)
n.Val.U.Fval = fval
n.Val.Ctype = CTFLT
Dump("complexmove-t", t)
}
- if t.Addable == 0 {
+ if !t.Addable {
Fatal("complexmove: to not addable")
}
TCOMPLEX64<<16 | TCOMPLEX128,
TCOMPLEX128<<16 | TCOMPLEX64,
TCOMPLEX128<<16 | TCOMPLEX128:
- if f.Addable == 0 || overlap_cplx(f, t) {
+ if !f.Addable || overlap_cplx(f, t) {
var tmp Node
Tempname(&tmp, f.Type)
Complexmove(f, &tmp)
// pick off float/complex opcodes
switch n.Op {
case OCOMPLEX:
- if res.Addable != 0 {
+ if res.Addable {
var n1 Node
var n2 Node
subnode(&n1, &n2, res)
case OREAL, OIMAG:
nl := n.Left
- if nl.Addable == 0 {
+ if !nl.Addable {
var tmp Node
Tempname(&tmp, nl.Type)
Complexgen(nl, &tmp)
tr := Simsimtype(n.Type)
tr = cplxsubtype(tr)
if tl != tr {
- if n.Addable == 0 {
+ if !n.Addable {
var n1 Node
Tempname(&n1, n.Type)
Complexmove(n, &n1)
return
}
- if res.Addable == 0 {
+ if !res.Addable {
var n1 Node
Igen(res, &n1, nil)
Cgen(n, &n1)
return
}
- if n.Addable != 0 {
+ if n.Addable {
Complexmove(n, res)
return
}
// make both sides addable in ullman order
var tnl Node
if nr != nil {
- if nl.Ullman > nr.Ullman && nl.Addable == 0 {
+ if nl.Ullman > nr.Ullman && !nl.Addable {
Tempname(&tnl, nl.Type)
Cgen(nl, &tnl)
nl = &tnl
}
- if nr.Addable == 0 {
+ if !nr.Addable {
var tnr Node
Tempname(&tnr, nr.Type)
Cgen(nr, &tnr)
}
}
- if nl.Addable == 0 {
+ if !nl.Addable {
Tempname(&tnl, nl.Type)
Cgen(nl, &tnl)
nl = &tnl
n := Nod(ONAME, nil, nil)
n.Sym = s
n.Type = nil
- n.Addable = 1
+ n.Addable = true
n.Ullman = 1
n.Xoffset = 0
return n
c.Class = PPARAMREF
c.Isddd = n.Isddd
c.Defn = n
- c.Addable = 0
+ c.Addable = false
c.Ullman = 2
c.Funcdepth = Funcdepth
c.Outer = n.Closure
as := Nod(OAS2, nil, nil)
as.List = left
as.Rlist = right
- as.Colas = 1
+ as.Colas = true
as.Lineno = lno
colasdefn(left, as)
fmt.Fprintf(&buf, " u(%d)", n.Ullman)
}
- if c == 0 && n.Addable != 0 {
+ if c == 0 && n.Addable {
fmt.Fprintf(&buf, " a(%d)", n.Addable)
}
}
}
- if n.Colas != 0 {
+ if n.Colas {
fmt.Fprintf(&buf, " colas(%d)", n.Colas)
}
break
}
- if n.Colas != 0 && !complexinit {
+ if n.Colas && !complexinit {
f += fmt.Sprintf("%v := %v", Nconv(n.Left, 0), Nconv(n.Right, 0))
} else {
f += fmt.Sprintf("%v = %v", Nconv(n.Left, 0), Nconv(n.Right, 0))
f += fmt.Sprintf("%v %v= %v", Nconv(n.Left, 0), Oconv(int(n.Etype), obj.FmtSharp), Nconv(n.Right, 0))
case OAS2:
- if n.Colas != 0 && !complexinit {
+ if n.Colas && !complexinit {
f += fmt.Sprintf("%v := %v", Hconv(n.List, obj.FmtComma), Hconv(n.Rlist, obj.FmtComma))
break
}
n.Stackparam = Nod(OPARAM, n, nil)
n.Stackparam.Type = n.Type
- n.Stackparam.Addable = 1
+ n.Stackparam.Addable = true
if n.Xoffset == BADWIDTH {
Fatal("addrescapes before param assignment")
}
case PAUTO:
n.Class |= PHEAP
- n.Addable = 0
+ n.Addable = false
n.Ullman = 2
n.Xoffset = 0
var z Node
z.Op = OLITERAL
z.Type = n.Type
- z.Addable = 1
+ z.Addable = true
switch Simtype[n.Type.Etype] {
case TCOMPLEX64, TCOMPLEX128:
s.Def = n
n.Type = t
n.Class = PAUTO
- n.Addable = 1
+ n.Addable = true
n.Ullman = 1
n.Esc = EscNever
n.Curfn = Curfn
}
func cadable(n *Node) bool {
- if n.Addable == 0 {
+ if !n.Addable {
// dont know how it happens,
// but it does
return false
{
$$ = Nod(ORANGE, nil, $4);
$$.List = $1;
- $$.Colas = 1;
+ $$.Colas = true;
colasdefn($1, $$);
}
| LRANGE expr
osimple_stmt ';' osimple_stmt ';' osimple_stmt
{
// init ; test ; incr
- if $5 != nil && $5.Colas != 0 {
+ if $5 != nil && $5.Colas {
Yyerror("cannot declare in the for-increment");
}
$$ = Nod(OFOR, nil, nil);
*n = Node{}
n.Op = OREGISTER
- n.Addable = 1
+ n.Addable = true
ullmancalc(n)
n.Val.U.Reg = int16(r)
n.Type = t
if s == nil {
s = Lookup(".noname")
}
- if n.Method != 0 {
+ if n.Method {
if n.Type != nil {
if n.Type.Sym != nil {
if n.Type.Sym.Pkg != nil {
Fatal("nodarg: offset not computed for %v", Tconv(t, 0))
}
n.Xoffset = first.Width
- n.Addable = 1
+ n.Addable = true
goto fp
}
Fatal("nodarg: offset not computed for %v", Tconv(t, 0))
}
n.Xoffset = t.Width
- n.Addable = 1
+ n.Addable = true
n.Orig = t.Nname
// Rewrite argument named _ to __,
// declaration (and possible allocation) until inside the case body.
// Delete the ODCL nodes here and recreate them inside the body below.
case OSELRECV, OSELRECV2:
- if r.Colas != 0 {
+ if r.Colas {
t = r.Ninit
if t != nil && t.N.Op == ODCL && t.N.Left == r.Left {
t = t.Next
// the conversion happens in the OAS instead.
tmp1 = r.Left
- if r.Colas != 0 {
+ if r.Colas {
tmp2 = Nod(ODCL, tmp1, nil)
typecheck(&tmp2, Etop)
l.N.Ninit = list(l.N.Ninit, tmp2)
}
if r.Ntest != nil {
tmp1 = r.Ntest
- if r.Colas != 0 {
+ if r.Colas {
tmp2 = Nod(ODCL, tmp1, nil)
typecheck(&tmp2, Etop)
l.N.Ninit = list(l.N.Ninit, tmp2)
Fatal("bad checknil")
}
- if ((Thearch.Thechar == '5' || Thearch.Thechar == '7' || Thearch.Thechar == '9') && n.Op != OREGISTER) || n.Addable == 0 || n.Op == OLITERAL {
+ if ((Thearch.Thechar == '5' || Thearch.Thechar == '7' || Thearch.Thechar == '9') && n.Op != OREGISTER) || !n.Addable || n.Op == OLITERAL {
var reg Node
Regalloc(®, Types[Tptr], n)
Cgen(n, ®)
n := Nod(ONAME, nil, nil)
n.Sym = s
n.Type = Types[TUINT8]
- n.Addable = 1
+ n.Addable = true
n.Ullman = 1
n.Class = PEXTERN
n.Xoffset = 0
s := typenamesym(t)
n := Nod(OADDR, s.Def, nil)
n.Type = Ptrto(s.Def.Type)
- n.Addable = 1
+ n.Addable = true
n.Ullman = 2
n.Typecheck = 1
return n
if n.Op != ONAME {
return false
}
- if n.Addable == 0 {
+ if !n.Addable {
return false
}
if n.Class&PHEAP != 0 {
switch n.Op {
case ONAME:
*nam = *n
- return n.Addable != 0
+ return n.Addable
case ODOT:
if !stataddr(nam, n.Left) {
func Nodintconst(v int64) *Node {
c := Nod(OLITERAL, nil, nil)
- c.Addable = 1
+ c.Addable = true
c.Val.U.Xval = new(Mpint)
Mpmovecfix(c.Val.U.Xval, v)
c.Val.Ctype = CTINT
func nodfltconst(v *Mpflt) *Node {
c := Nod(OLITERAL, nil, nil)
- c.Addable = 1
+ c.Addable = true
c.Val.U.Fval = newMpflt()
mpmovefltflt(c.Val.U.Fval, v)
c.Val.Ctype = CTFLT
func Nodconst(n *Node, t *Type, v int64) {
*n = Node{}
n.Op = OLITERAL
- n.Addable = 1
+ n.Addable = true
ullmancalc(n)
n.Val.U.Xval = new(Mpint)
Mpmovecfix(n.Val.U.Xval, v)
ni := newname(Lookup("i"))
ni.Type = Types[TINT]
n.List = list1(ni)
- n.Colas = 1
+ n.Colas = true
colasdefn(n.List, n)
ni = n.List.N
ni := newname(Lookup("i"))
ni.Type = Types[TINT]
nrange.List = list1(ni)
- nrange.Colas = 1
+ nrange.Colas = true
colasdefn(nrange.List, nrange)
ni = nrange.List.N
Op uint8
Nointerface bool
Ullman uint8 // sethi/ullman number
- Addable uint8 // type of addressability - 0 is not addressable
+ Addable bool // addressable
Etype uint8 // op for OASOP, etype for OTYPE, exclam for export
Bounded bool // bounds check unnecessary
Class uint8 // PPARAM, PAUTO, PEXTERN, etc
- Method uint8 // OCALLMETH name
+ Method bool // OCALLMETH is direct method call
Embedded uint8 // ODCLFIELD embedded type
- Colas uint8 // OAS resulting from :=
+ Colas bool // OAS resulting from :=
Diag uint8 // already printed error about this
Noescape bool // func arguments do not escape; TODO(rsc): move Noescape to Func struct (see CL 7360)
Walkdef uint8
goto ret
case OLITERAL:
- n.Addable = 1
+ n.Addable = true
goto ret
case OCLOSUREVAR, OCFUNC:
- n.Addable = 1
+ n.Addable = true
goto ret
case ONAME:
if n.Class&PHEAP == 0 && n.Class != PPARAMREF {
- n.Addable = 1
+ n.Addable = true
}
goto ret
l := Nod(ONAME, nil, nil)
l.Sym = sym
l.Type = Ptrto(Types[TUINT8])
- l.Addable = 1
+ l.Addable = true
l.Class = PEXTERN
l.Xoffset = 0
sym.Def = l
}
l := Nod(OADDR, sym.Def, nil)
- l.Addable = 1
+ l.Addable = true
ll = list(ll, l)
if isdirectiface(n.Left.Type) {
{
yyVAL.node = Nod(ORANGE, nil, yyDollar[4].node)
yyVAL.node.List = yyDollar[1].list
- yyVAL.node.Colas = 1
+ yyVAL.node.Colas = true
colasdefn(yyDollar[1].list, yyVAL.node)
}
case 69:
//line go.y:632
{
// init ; test ; incr
- if yyDollar[5].node != nil && yyDollar[5].node.Colas != 0 {
+ if yyDollar[5].node != nil && yyDollar[5].node.Colas {
Yyerror("cannot declare in the for-increment")
}
yyVAL.node = Nod(OFOR, nil, nil)