[dev.cc] cmd/internal/obj, cmd/internal/gc, new6g: reconvert
Reconvert using rsc.io/c2go rev 27b3f59.
Changes to converter:
- fatal does not return, so no fallthrough after fatal in switch
- many more function results and variables identified as bool
- simplification of negated boolean expressions
Change-Id: I3bc67da5e46cb7ee613e230cf7e9533036cc870b
Reviewed-on: https://go-review.googlesource.com/5171
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
diff --git a/src/cmd/internal/gc/align.go b/src/cmd/internal/gc/align.go
index 062d35a..994b7a2 100644
--- a/src/cmd/internal/gc/align.go
+++ b/src/cmd/internal/gc/align.go
@@ -138,7 +138,7 @@
if t.Width == -2 {
lno = int(lineno)
lineno = int32(t.Lineno)
- if !(t.Broke != 0) {
+ if t.Broke == 0 {
t.Broke = 1
Yyerror("invalid recursive type %v", Tconv(t, 0))
}
@@ -253,14 +253,14 @@
checkwidth(t.Down)
case TFORW: // should have been filled in
- if !(t.Broke != 0) {
+ if t.Broke == 0 {
Yyerror("invalid recursive type %v", Tconv(t, 0))
}
w = 1 // anything will do
// dummy type; should be replaced before use.
case TANY:
- if !(Debug['A'] != 0) {
+ if Debug['A'] == 0 {
Fatal("dowidth any")
}
w = 1 // anything will do
@@ -294,7 +294,7 @@
checkwidth(t.Type)
t.Align = uint8(Widthptr)
} else if t.Bound == -100 {
- if !(t.Broke != 0) {
+ if t.Broke == 0 {
Yyerror("use of [...] array outside of array literal")
t.Broke = 1
}
@@ -394,7 +394,7 @@
Fatal("checkwidth %v", Tconv(t, 0))
}
- if !(defercalc != 0) {
+ if defercalc == 0 {
dowidth(t)
return
}
@@ -427,7 +427,7 @@
func resumecheckwidth() {
var l *TypeList
- if !(defercalc != 0) {
+ if defercalc == 0 {
Fatal("resumecheckwidth")
}
for l = tlq; l != nil; l = tlq {
diff --git a/src/cmd/internal/gc/bits.go b/src/cmd/internal/gc/bits.go
index 613e15d..23da356 100644
--- a/src/cmd/internal/gc/bits.go
+++ b/src/cmd/internal/gc/bits.go
@@ -66,15 +66,15 @@
return c;
}
*/
-func bany(a *Bits) int {
+func bany(a *Bits) bool {
var i int
for i = 0; i < BITS; i++ {
if a.b[i] != 0 {
- return 1
+ return true
}
}
- return 0
+ return false
}
/*
@@ -112,8 +112,8 @@
return c
}
-func btest(a *Bits, n uint) int {
- return bool2int(a.b[n/64]&(1<<(n%64)) != 0)
+func btest(a *Bits, n uint) bool {
+ return a.b[n/64]&(1<<(n%64)) != 0
}
func biset(a *Bits, n uint) {
@@ -144,7 +144,7 @@
first = 1
- for bany(&bits) != 0 {
+ for bany(&bits) {
i = bnum(bits)
if first != 0 {
first = 0
diff --git a/src/cmd/internal/gc/bv.go b/src/cmd/internal/gc/bv.go
index 998a1f5..002b5a4 100644
--- a/src/cmd/internal/gc/bv.go
+++ b/src/cmd/internal/gc/bv.go
@@ -120,15 +120,15 @@
return int(i)
}
-func bvisempty(bv *Bvec) int {
+func bvisempty(bv *Bvec) bool {
var i int32
for i = 0; i < bv.n; i += WORDBITS {
if bv.b[i>>WORDSHIFT] != 0 {
- return 0
+ return false
}
}
- return 1
+ return true
}
func bvnot(bv *Bvec) {
diff --git a/src/cmd/internal/gc/closure.go b/src/cmd/internal/gc/closure.go
index 5a1ae65..4c9b0af 100644
--- a/src/cmd/internal/gc/closure.go
+++ b/src/cmd/internal/gc/closure.go
@@ -91,7 +91,7 @@
for l = func_.Cvars; l != nil; l = l.Next {
n = l.N.Closure
- if !(n.Captured != 0) {
+ if n.Captured == 0 {
n.Captured = 1
if n.Decldepth == 0 {
Fatal("typecheckclosure: var %v does not have decldepth assigned", Nconv(n, obj.FmtShort))
@@ -218,7 +218,7 @@
v.Outerexpr = nil
// out parameters will be assigned to implicitly upon return.
- if outer.Class != PPARAMOUT && !(v.Closure.Addrtaken != 0) && !(v.Closure.Assigned != 0) && v.Type.Width <= 128 {
+ if outer.Class != PPARAMOUT && v.Closure.Addrtaken == 0 && v.Closure.Assigned == 0 && v.Type.Width <= 128 {
v.Byval = 1
} else {
v.Closure.Addrtaken = 1
@@ -351,7 +351,7 @@
cv = Nod(OCLOSUREVAR, nil, nil)
cv.Type = v.Type
- if !(v.Byval != 0) {
+ if v.Byval == 0 {
cv.Type = Ptrto(v.Type)
}
offset = Rnd(offset, int64(cv.Type.Align))
@@ -389,7 +389,7 @@
typechecklist(body, Etop)
walkstmtlist(body)
xfunc.Enter = body
- xfunc.Needctxt = uint8(bool2int(nvar > 0))
+ xfunc.Needctxt = nvar > 0
}
lineno = int32(lno)
@@ -430,7 +430,7 @@
continue
}
typ1 = typenod(v.Type)
- if !(v.Byval != 0) {
+ if v.Byval == 0 {
typ1 = Nod(OIND, typ1, nil)
}
typ.List = list(typ.List, Nod(ODCLFIELD, newname(v.Sym), typ1))
@@ -594,7 +594,7 @@
// Declare and initialize variable holding receiver.
body = nil
- xfunc.Needctxt = 1
+ xfunc.Needctxt = true
cv = Nod(OCLOSUREVAR, nil, nil)
cv.Xoffset = int64(Widthptr)
cv.Type = rcvrtype
@@ -609,7 +609,7 @@
ptr.Used = 1
ptr.Curfn = xfunc
xfunc.Dcl = list(xfunc.Dcl, ptr)
- if Isptr[rcvrtype.Etype] != 0 || Isinter(rcvrtype) != 0 {
+ if Isptr[rcvrtype.Etype] != 0 || Isinter(rcvrtype) {
ptr.Ntype = typenod(rcvrtype)
body = list(body, Nod(OAS, ptr, cv))
} else {
@@ -652,7 +652,7 @@
//
// Like walkclosure above.
- if Isinter(n.Left.Type) != 0 {
+ if Isinter(n.Left.Type) {
// Trigger panic for method on nil interface now.
// Otherwise it happens in the wrapper and is confusing.
n.Left = cheapexpr(n.Left, init)
diff --git a/src/cmd/internal/gc/const.go b/src/cmd/internal/gc/const.go
index c8c244b..f9bd557 100644
--- a/src/cmd/internal/gc/const.go
+++ b/src/cmd/internal/gc/const.go
@@ -47,7 +47,7 @@
* implicit conversion.
*/
func Convlit(np **Node, t *Type) {
- convlit1(np, t, 0)
+ convlit1(np, t, false)
}
/*
@@ -55,17 +55,17 @@
* return a new node if necessary
* (if n is a named constant, can't edit n->type directly).
*/
-func convlit1(np **Node, t *Type, explicit int) {
+func convlit1(np **Node, t *Type, explicit bool) {
var ct int
var et int
var n *Node
var nn *Node
n = *np
- if n == nil || t == nil || n.Type == nil || isideal(t) != 0 || n.Type == t {
+ if n == nil || t == nil || n.Type == nil || isideal(t) || n.Type == t {
return
}
- if !(explicit != 0) && !(isideal(n.Type) != 0) {
+ if !explicit && !isideal(n.Type) {
return
}
@@ -96,7 +96,7 @@
// target is invalid type for a constant? leave alone.
case OLITERAL:
- if !(okforconst[t.Etype] != 0) && n.Type.Etype != TNIL {
+ if okforconst[t.Etype] == 0 && n.Type.Etype != TNIL {
defaultlit(&n, nil)
*np = n
return
@@ -104,12 +104,12 @@
case OLSH,
ORSH:
- convlit1(&n.Left, t, bool2int(explicit != 0 && isideal(n.Left.Type) != 0))
+ convlit1(&n.Left, t, explicit && isideal(n.Left.Type))
t = n.Left.Type
if t != nil && t.Etype == TIDEAL && n.Val.Ctype != CTINT {
n.Val = toint(n.Val)
}
- if t != nil && !(Isint[t.Etype] != 0) {
+ if t != nil && Isint[t.Etype] == 0 {
Yyerror("invalid operation: %v (shift of type %v)", Nconv(n, 0), Tconv(t, 0))
t = nil
}
@@ -179,7 +179,7 @@
return
case TARRAY:
- if !(Isslice(t) != 0) {
+ if !Isslice(t) {
goto bad
}
@@ -258,7 +258,7 @@
case CTCPLX:
overflow(n.Val, t)
}
- } else if et == TSTRING && (ct == CTINT || ct == CTRUNE) && explicit != 0 {
+ } else if et == TSTRING && (ct == CTINT || ct == CTRUNE) && explicit {
n.Val = tostr(n.Val)
} else {
goto bad
@@ -269,14 +269,14 @@
return
bad:
- if !(n.Diag != 0) {
- if !(t.Broke != 0) {
+ if n.Diag == 0 {
+ if t.Broke == 0 {
Yyerror("cannot convert %v to type %v", Nconv(n, 0), Tconv(t, 0))
}
n.Diag = 1
}
- if isideal(n.Type) != 0 {
+ if isideal(n.Type) {
defaultlit(&n, nil)
*np = n
}
@@ -388,35 +388,35 @@
return v
}
-func doesoverflow(v Val, t *Type) int {
+func doesoverflow(v Val, t *Type) bool {
switch v.Ctype {
case CTINT,
CTRUNE:
- if !(Isint[t.Etype] != 0) {
+ if Isint[t.Etype] == 0 {
Fatal("overflow: %v integer constant", Tconv(t, 0))
}
if Mpcmpfixfix(v.U.Xval, Minintval[t.Etype]) < 0 || Mpcmpfixfix(v.U.Xval, Maxintval[t.Etype]) > 0 {
- return 1
+ return true
}
case CTFLT:
- if !(Isfloat[t.Etype] != 0) {
+ if Isfloat[t.Etype] == 0 {
Fatal("overflow: %v floating-point constant", Tconv(t, 0))
}
if mpcmpfltflt(v.U.Fval, minfltval[t.Etype]) <= 0 || mpcmpfltflt(v.U.Fval, maxfltval[t.Etype]) >= 0 {
- return 1
+ return true
}
case CTCPLX:
- if !(Iscomplex[t.Etype] != 0) {
+ if Iscomplex[t.Etype] == 0 {
Fatal("overflow: %v complex constant", Tconv(t, 0))
}
if mpcmpfltflt(&v.U.Cval.Real, minfltval[t.Etype]) <= 0 || mpcmpfltflt(&v.U.Cval.Real, maxfltval[t.Etype]) >= 0 || mpcmpfltflt(&v.U.Cval.Imag, minfltval[t.Etype]) <= 0 || mpcmpfltflt(&v.U.Cval.Imag, maxfltval[t.Etype]) >= 0 {
- return 1
+ return true
}
}
- return 0
+ return false
}
func overflow(v Val, t *Type) {
@@ -426,7 +426,7 @@
return
}
- if !(doesoverflow(v, t) != 0) {
+ if !doesoverflow(v, t) {
return
}
@@ -479,14 +479,14 @@
return int(n.Val.Ctype)
}
-func Isconst(n *Node, ct int) int {
+func Isconst(n *Node, ct int) bool {
var t int
t = consttype(n)
// If the caller is asking for CTINT, allow CTRUNE too.
// Makes life easier for back ends.
- return bool2int(t == ct || (ct == CTINT && t == CTRUNE))
+ return t == ct || (ct == CTINT && t == CTRUNE)
}
func saveorig(n *Node) *Node {
@@ -557,18 +557,18 @@
if n.Type == nil {
return
}
- if !(okforconst[n.Type.Etype] != 0) && n.Type.Etype != TNIL {
+ if okforconst[n.Type.Etype] == 0 && n.Type.Etype != TNIL {
return
}
// merge adjacent constants in the argument list.
case OADDSTR:
for l1 = n.List; l1 != nil; l1 = l1.Next {
- if Isconst(l1.N, CTSTR) != 0 && l1.Next != nil && Isconst(l1.Next.N, CTSTR) != 0 {
+ if Isconst(l1.N, CTSTR) && l1.Next != nil && Isconst(l1.Next.N, CTSTR) {
// merge from l1 up to but not including l2
str = new(Strlit)
l2 = l1
- for l2 != nil && Isconst(l2.N, CTSTR) != 0 {
+ for l2 != nil && Isconst(l2.N, CTSTR) {
nr = l2.N
str.S += nr.Val.U.Sval.S
l2 = l2.Next
@@ -590,7 +590,7 @@
}
// collapse single-constant list to single constant.
- if count(n.List) == 1 && Isconst(n.List.N, CTSTR) != 0 {
+ if count(n.List) == 1 && Isconst(n.List.N, CTSTR) {
n.Op = OLITERAL
n.Val = n.List.N.Val
}
@@ -655,7 +655,7 @@
defaultlit(&nr, Types[TUINT])
n.Right = nr
- if nr.Type != nil && (Issigned[nr.Type.Etype] != 0 || !(Isint[nr.Type.Etype] != 0)) {
+ if nr.Type != nil && (Issigned[nr.Type.Etype] != 0 || Isint[nr.Type.Etype] == 0) {
goto illegal
}
if nl.Val.Ctype != CTRUNE {
@@ -787,7 +787,7 @@
// The default case above would print 'ideal % ideal',
// which is not quite an ideal error.
case OMOD<<16 | CTFLT:
- if !(n.Diag != 0) {
+ if n.Diag == 0 {
Yyerror("illegal constant expression: floating-point % operation")
n.Diag = 1
}
@@ -985,7 +985,7 @@
switch uint32(n.Op)<<16 | uint32(v.Ctype) {
default:
- if !(n.Diag != 0) {
+ if n.Diag == 0 {
Yyerror("illegal constant expression %v %v", Oconv(int(n.Op), 0), Tconv(nl.Type, 0))
n.Diag = 1
}
@@ -1006,7 +1006,7 @@
OCONV<<16 | CTRUNE,
OCONV<<16 | CTFLT,
OCONV<<16 | CTSTR:
- convlit1(&nl, n.Type, 1)
+ convlit1(&nl, n.Type, true)
v = nl.Val
@@ -1058,7 +1058,7 @@
mpnegflt(&v.U.Cval.Imag)
case ONOT<<16 | CTBOOL:
- if !(v.U.Bval != 0) {
+ if v.U.Bval == 0 {
goto settrue
}
goto setfalse
@@ -1087,18 +1087,18 @@
settrue:
norig = saveorig(n)
- *n = *Nodbool(1)
+ *n = *Nodbool(true)
n.Orig = norig
return
setfalse:
norig = saveorig(n)
- *n = *Nodbool(0)
+ *n = *Nodbool(false)
n.Orig = norig
return
illegal:
- if !(n.Diag != 0) {
+ if n.Diag == 0 {
Yyerror("illegal constant expression: %v %v %v", Tconv(nl.Type, 0), Oconv(int(n.Op), 0), Tconv(nr.Type, 0))
n.Diag = 1
}
@@ -1114,7 +1114,6 @@
switch v.Ctype {
default:
Fatal("nodlit ctype %d", v.Ctype)
- fallthrough
case CTSTR:
n.Type = idealstring
@@ -1163,7 +1162,7 @@
var k1 int
var k2 int
- if n == nil || !(isideal(n.Type) != 0) {
+ if n == nil || !isideal(n.Type) {
return CTxxx
}
@@ -1235,7 +1234,7 @@
var t1 *Type
n = *np
- if n == nil || !(isideal(n.Type) != 0) {
+ if n == nil || !isideal(n.Type) {
return
}
@@ -1257,7 +1256,7 @@
if n.Val.Ctype == CTNIL {
lineno = int32(lno)
- if !(n.Diag != 0) {
+ if n.Diag == 0 {
Yyerror("use of untyped nil")
n.Diag = 1
}
@@ -1341,17 +1340,17 @@
if l.Type == nil || r.Type == nil {
return
}
- if !(isideal(l.Type) != 0) {
+ if !isideal(l.Type) {
Convlit(rp, l.Type)
return
}
- if !(isideal(r.Type) != 0) {
+ if !isideal(r.Type) {
Convlit(lp, r.Type)
return
}
- if !(force != 0) {
+ if force == 0 {
return
}
if l.Type.Etype == TBOOL {
@@ -1387,8 +1386,8 @@
return stringsCompare(l.Val.U.Sval.S, r.Val.U.Sval.S)
}
-func Smallintconst(n *Node) int {
- if n.Op == OLITERAL && Isconst(n, CTINT) != 0 && n.Type != nil {
+func Smallintconst(n *Node) bool {
+ if n.Op == OLITERAL && Isconst(n, CTINT) && n.Type != nil {
switch Simtype[n.Type.Etype] {
case TINT8,
TUINT8,
@@ -1398,7 +1397,7 @@
TUINT32,
TBOOL,
TPTR32:
- return 1
+ return true
case TIDEAL,
TINT64,
@@ -1407,11 +1406,11 @@
if Mpcmpfixfix(n.Val.U.Xval, Minintval[TINT32]) < 0 || Mpcmpfixfix(n.Val.U.Xval, Maxintval[TINT32]) > 0 {
break
}
- return 1
+ return true
}
}
- return 0
+ return false
}
func nonnegconst(n *Node) int {
@@ -1491,7 +1490,6 @@
switch val.Ctype {
default:
Fatal("convconst ctype=%d %v", val.Ctype, Tconv(t, obj.FmtLong))
- fallthrough
case CTINT,
CTRUNE:
@@ -1615,7 +1613,7 @@
// may be known at compile time, are not Go language constants.
// Only called for expressions known to evaluated to compile-time
// constants.
-func isgoconst(n *Node) int {
+func isgoconst(n *Node) bool {
var l *Node
var t *Type
@@ -1652,20 +1650,20 @@
OCOMPLEX,
OREAL,
OIMAG:
- if isgoconst(n.Left) != 0 && (n.Right == nil || isgoconst(n.Right) != 0) {
- return 1
+ if isgoconst(n.Left) && (n.Right == nil || isgoconst(n.Right)) {
+ return true
}
case OCONV:
- if okforconst[n.Type.Etype] != 0 && isgoconst(n.Left) != 0 {
- return 1
+ if okforconst[n.Type.Etype] != 0 && isgoconst(n.Left) {
+ return true
}
case OLEN,
OCAP:
l = n.Left
- if isgoconst(l) != 0 {
- return 1
+ if isgoconst(l) {
+ return true
}
// Special case: len/cap is constant when applied to array or
@@ -1676,24 +1674,24 @@
if t != nil && Isptr[t.Etype] != 0 {
t = t.Type
}
- if Isfixedarray(t) != 0 && !(hascallchan(l) != 0) {
- return 1
+ if Isfixedarray(t) && !hascallchan(l) {
+ return true
}
case OLITERAL:
if n.Val.Ctype != CTNIL {
- return 1
+ return true
}
case ONAME:
l = n.Sym.Def
if l != nil && l.Op == OLITERAL && n.Val.Ctype != CTNIL {
- return 1
+ return true
}
case ONONAME:
if n.Sym.Def != nil && n.Sym.Def.Op == OIOTA {
- return 1
+ return true
}
// Only constant calls are unsafe.Alignof, Offsetof, and Sizeof.
@@ -1707,19 +1705,19 @@
break
}
if l.Sym.Name == "Alignof" || l.Sym.Name == "Offsetof" || l.Sym.Name == "Sizeof" {
- return 1
+ return true
}
}
//dump("nonconst", n);
- return 0
+ return false
}
-func hascallchan(n *Node) int {
+func hascallchan(n *Node) bool {
var l *NodeList
if n == nil {
- return 0
+ return false
}
switch n.Op {
case OAPPEND,
@@ -1742,23 +1740,23 @@
OREAL,
ORECOVER,
ORECV:
- return 1
+ return true
}
- if hascallchan(n.Left) != 0 || hascallchan(n.Right) != 0 {
- return 1
+ if hascallchan(n.Left) || hascallchan(n.Right) {
+ return true
}
for l = n.List; l != nil; l = l.Next {
- if hascallchan(l.N) != 0 {
- return 1
+ if hascallchan(l.N) {
+ return true
}
}
for l = n.Rlist; l != nil; l = l.Next {
- if hascallchan(l.N) != 0 {
- return 1
+ if hascallchan(l.N) {
+ return true
}
}
- return 0
+ return false
}
diff --git a/src/cmd/internal/gc/cplx.go b/src/cmd/internal/gc/cplx.go
index bc5b547..34decd1 100644
--- a/src/cmd/internal/gc/cplx.go
+++ b/src/cmd/internal/gc/cplx.go
@@ -10,12 +10,12 @@
return a<<16 | b
}
-func overlap_cplx(f *Node, t *Node) int {
+func overlap_cplx(f *Node, t *Node) bool {
// check whether f and t could be overlapping stack references.
// not exact, because it's hard to check for the stack register
// in portable code. close enough: worst case we will allocate
// an extra temporary and the registerizer will clean it up.
- return bool2int(f.Op == OINDREG && t.Op == OINDREG && f.Xoffset+f.Type.Width >= t.Xoffset && t.Xoffset+t.Type.Width >= f.Xoffset)
+ return f.Op == OINDREG && t.Op == OINDREG && f.Xoffset+f.Type.Width >= t.Xoffset && t.Xoffset+t.Type.Width >= f.Xoffset
}
func Complexbool(op int, nl *Node, nr *Node, true_ bool, likely int, to *obj.Prog) {
@@ -31,20 +31,20 @@
// 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 == 0 {
Tempname(&tnl, nl.Type)
Thearch.Cgen(nl, &tnl)
nl = &tnl
}
- if !(nr.Addable != 0) {
+ if nr.Addable == 0 {
Tempname(&tnr, nr.Type)
Thearch.Cgen(nr, &tnr)
nr = &tnr
}
}
- if !(nl.Addable != 0) {
+ if nl.Addable == 0 {
Tempname(&tnl, nl.Type)
Thearch.Cgen(nl, &tnl)
nl = &tnl
@@ -87,7 +87,7 @@
var tc int
var t *Type
- if !(nc.Addable != 0) {
+ if nc.Addable == 0 {
Fatal("subnode not addable")
}
@@ -243,7 +243,7 @@
n.Val.Ctype = CTFLT
n.Type = t
- if !(Isfloat[t.Etype] != 0) {
+ if Isfloat[t.Etype] == 0 {
Fatal("nodfconst: bad type %v", Tconv(t, 0))
}
}
@@ -251,7 +251,7 @@
/*
* cplx.c
*/
-func Complexop(n *Node, res *Node) int {
+func Complexop(n *Node, res *Node) bool {
if n != nil && n.Type != nil {
if Iscomplex[n.Type.Etype] != 0 {
goto maybe
@@ -292,11 +292,11 @@
//dump("\ncomplex-no", n);
no:
- return 0
+ return false
//dump("\ncomplex-yes", n);
yes:
- return 1
+ return true
}
func Complexmove(f *Node, t *Node) {
@@ -313,7 +313,7 @@
Dump("complexmove-t", t)
}
- if !(t.Addable != 0) {
+ if t.Addable == 0 {
Fatal("complexmove: to not addable")
}
@@ -322,7 +322,6 @@
switch uint32(ft)<<16 | uint32(tt) {
default:
Fatal("complexmove: unknown conversion: %v -> %v\n", Tconv(f.Type, 0), Tconv(t.Type, 0))
- fallthrough
// complex to complex move/convert.
// make f addable.
@@ -331,7 +330,7 @@
TCOMPLEX64<<16 | TCOMPLEX128,
TCOMPLEX128<<16 | TCOMPLEX64,
TCOMPLEX128<<16 | TCOMPLEX128:
- if !(f.Addable != 0) || overlap_cplx(f, t) != 0 {
+ if f.Addable == 0 || overlap_cplx(f, t) {
Tempname(&tmp, f.Type)
Complexmove(f, &tmp)
f = &tmp
@@ -380,7 +379,7 @@
case OREAL,
OIMAG:
nl = n.Left
- if !(nl.Addable != 0) {
+ if nl.Addable == 0 {
Tempname(&tmp, nl.Type)
Complexgen(nl, &tmp)
nl = &tmp
@@ -403,7 +402,7 @@
tr = Simsimtype(n.Type)
tr = cplxsubtype(tr)
if tl != tr {
- if !(n.Addable != 0) {
+ if n.Addable == 0 {
Tempname(&n1, n.Type)
Complexmove(n, &n1)
n = &n1
@@ -413,7 +412,7 @@
return
}
- if !(res.Addable != 0) {
+ if res.Addable == 0 {
Thearch.Igen(res, &n1, nil)
Thearch.Cgen(n, &n1)
Thearch.Regfree(&n1)
@@ -429,7 +428,6 @@
default:
Dump("complexgen: unknown op", n)
Fatal("complexgen: unknown op %v", Oconv(int(n.Op), 0))
- fallthrough
case ODOT,
ODOTPTR,
@@ -464,20 +462,20 @@
// 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 == 0 {
Tempname(&tnl, nl.Type)
Thearch.Cgen(nl, &tnl)
nl = &tnl
}
- if !(nr.Addable != 0) {
+ if nr.Addable == 0 {
Tempname(&tnr, nr.Type)
Thearch.Cgen(nr, &tnr)
nr = &tnr
}
}
- if !(nl.Addable != 0) {
+ if nl.Addable == 0 {
Tempname(&tnl, nl.Type)
Thearch.Cgen(nl, &tnl)
nl = &tnl
diff --git a/src/cmd/internal/gc/dcl.go b/src/cmd/internal/gc/dcl.go
index 0aeb587..577f7ec 100644
--- a/src/cmd/internal/gc/dcl.go
+++ b/src/cmd/internal/gc/dcl.go
@@ -10,17 +10,17 @@
"strings"
)
-func dflag() int {
- if !(Debug['d'] != 0) {
- return 0
+func dflag() bool {
+ if Debug['d'] == 0 {
+ return false
}
if Debug['y'] != 0 {
- return 1
+ return true
}
if incannedimport != 0 {
- return 0
+ return false
}
- return 1
+ return true
}
/*
@@ -49,7 +49,7 @@
d = push()
dcopy(d, s)
- if dflag() != 0 {
+ if dflag() {
fmt.Printf("\t%v push %v %p\n", Ctxt.Line(int(lineno)), Sconv(s, 0), s.Def)
}
return d
@@ -71,7 +71,7 @@
lno = int(s.Lastlineno)
dcopy(s, d)
d.Lastlineno = int32(lno)
- if dflag() != 0 {
+ if dflag() {
fmt.Printf("\t%v pop %v %p\n", Ctxt.Line(int(lineno)), Sconv(s, 0), s.Def)
}
}
@@ -195,7 +195,7 @@
s = n.Sym
// kludgy: typecheckok means we're past parsing. Eg genwrapper may declare out of package names later.
- if importpkg == nil && !(typecheckok != 0) && s.Pkg != localpkg {
+ if importpkg == nil && typecheckok == 0 && s.Pkg != localpkg {
Yyerror("cannot declare name %v", Sconv(s, 0))
}
@@ -206,7 +206,7 @@
gen = 0
if ctxt == PEXTERN {
externdcl = list(externdcl, n)
- if dflag() != 0 {
+ if dflag() {
fmt.Printf("\t%v global decl %v %p\n", Ctxt.Line(int(lineno)), Sconv(s, 0), n)
}
} else {
@@ -264,14 +264,14 @@
* new_name_list (type | [type] = expr_list)
*/
func variter(vl *NodeList, t *Node, el *NodeList) *NodeList {
- var doexpr int
+ var doexpr bool
var v *Node
var e *Node
var as2 *Node
var init *NodeList
init = nil
- doexpr = bool2int(el != nil)
+ doexpr = el != nil
if count(el) == 1 && count(vl) > 1 {
e = el.N
@@ -293,7 +293,7 @@
}
for ; vl != nil; vl = vl.Next {
- if doexpr != 0 {
+ if doexpr {
if el == nil {
Yyerror("missing expression in var declaration")
break
@@ -479,17 +479,17 @@
/*
* := declarations
*/
-func colasname(n *Node) int {
+func colasname(n *Node) bool {
switch n.Op {
case ONAME,
ONONAME,
OPACK,
OTYPE,
OLITERAL:
- return bool2int(n.Sym != nil)
+ return n.Sym != nil
}
- return 0
+ return false
}
func colasdefn(left *NodeList, defn *Node) {
@@ -511,7 +511,7 @@
if isblank(n) {
continue
}
- if !(colasname(n) != 0) {
+ if !colasname(n) {
yyerrorl(int(defn.Lineno), "non-name %v on left side of :=", Nconv(n, 0))
nerr++
continue
@@ -735,7 +735,7 @@
if t.Thistuple != 0 {
for ft = getthisx(t).Type; ft != nil; ft = ft.Down {
- if !(ft.Nname != nil) || !(ft.Nname.Sym != nil) {
+ if ft.Nname == nil || ft.Nname.Sym == nil {
continue
}
n = ft.Nname // no need for newname(ft->nname->sym)
@@ -746,7 +746,7 @@
if t.Intuple != 0 {
for ft = getinargx(t).Type; ft != nil; ft = ft.Down {
- if !(ft.Nname != nil) || !(ft.Nname.Sym != nil) {
+ if ft.Nname == nil || ft.Nname.Sym == nil {
continue
}
n = ft.Nname
@@ -757,7 +757,7 @@
if t.Outtuple != 0 {
for ft = getoutargx(t).Type; ft != nil; ft = ft.Down {
- if !(ft.Nname != nil) || !(ft.Nname.Sym != nil) {
+ if ft.Nname == nil || ft.Nname.Sym == nil {
continue
}
n = ft.Nname
@@ -925,7 +925,7 @@
tp = &f.Down
}
- for f = t.Type; f != nil && !(t.Broke != 0); f = f.Down {
+ for f = t.Type; f != nil && t.Broke == 0; f = f.Down {
if f.Broke != 0 {
t.Broke = 1
}
@@ -934,7 +934,7 @@
uniqgen++
checkdupfields(t.Type, "field")
- if !(t.Broke != 0) {
+ if t.Broke == 0 {
checkwidth(t)
}
@@ -962,7 +962,7 @@
tp = &f.Down
}
- for f = t.Type; f != nil && !(t.Broke != 0); f = f.Down {
+ for f = t.Type; f != nil && t.Broke == 0; f = f.Down {
if f.Broke != 0 {
t.Broke = 1
}
@@ -1072,7 +1072,7 @@
}
}
- for f = t.Type; f != nil && !(t.Broke != 0); f = f.Down {
+ for f = t.Type; f != nil && t.Broke == 0; f = f.Down {
if f.Broke != 0 {
t.Broke = 1
}
@@ -1199,7 +1199,7 @@
}
n = Nod(ODCLFIELD, n, t)
if n.Right != nil && n.Right.Op == ODDD {
- if !(input != 0) {
+ if input == 0 {
Yyerror("cannot use ... in output argument list")
} else if l.Next != nil {
Yyerror("can only use ... as final argument in list")
@@ -1232,23 +1232,23 @@
* *struct{} as the receiver.
* (See fakethis above.)
*/
-func isifacemethod(f *Type) int {
+func isifacemethod(f *Type) bool {
var rcvr *Type
var t *Type
rcvr = getthisx(f).Type
if rcvr.Sym != nil {
- return 0
+ return false
}
t = rcvr.Type
- if !(Isptr[t.Etype] != 0) {
- return 0
+ if Isptr[t.Etype] == 0 {
+ return false
}
t = t.Type
if t.Sym != nil || t.Etype != TSTRUCT || t.Type != nil {
- return 0
+ return false
}
- return 1
+ return true
}
/*
@@ -1480,7 +1480,7 @@
}
}
- if local && !(pa.Local != 0) {
+ if local && pa.Local == 0 {
// defining method on non-local type.
Yyerror("cannot define new methods on non-local type %v", Tconv(pa, 0))
@@ -1506,7 +1506,7 @@
}
f = structfield(n)
- f.Nointerface = uint8(bool2int(nointerface))
+ f.Nointerface = nointerface
// during import unexported method names should be in the type's package
if importpkg != nil && f.Sym != nil && !exportname(f.Sym.Name) && f.Sym.Pkg != structpkg {
diff --git a/src/cmd/internal/gc/esc.go b/src/cmd/internal/gc/esc.go
index 35543e1..f4d5b43 100644
--- a/src/cmd/internal/gc/esc.go
+++ b/src/cmd/internal/gc/esc.go
@@ -69,7 +69,7 @@
func visit(n *Node) uint32 {
var min uint32
- var recursive uint32
+ var recursive bool
var l *NodeList
var block *NodeList
@@ -95,7 +95,7 @@
// If visitcodelist found its way back to n->walkgen, then this
// block is a set of mutually recursive functions.
// Otherwise it's just a lone function that does not recurse.
- recursive = uint32(bool2int(min == n.Walkgen))
+ recursive = min == n.Walkgen
// Remove connected component from stack.
// Mark walkgen so that future visits return a large number
@@ -110,7 +110,7 @@
l.Next = nil
// Run escape analysis on this set of functions.
- analyze(block, int(recursive))
+ analyze(block, recursive)
}
return min
@@ -199,7 +199,7 @@
dstcount int
edgecount int
noesc *NodeList
- recursive int
+ recursive bool
}
var tags [16]*Strlit
@@ -247,7 +247,7 @@
return EscReturn | em<<EscBits
}
-func analyze(all *NodeList, recursive int) {
+func analyze(all *NodeList, recursive bool) {
var l *NodeList
var es EscState
var e *EscState
@@ -351,7 +351,7 @@
}
// in a mutually recursive group we lose track of the return values
- if e.recursive != 0 {
+ if e.recursive {
for ll = Curfn.Dcl; ll != nil; ll = ll.Next {
if ll.N.Op == ONAME && ll.N.Class == PPARAMOUT {
escflows(e, &e.theSink, ll.N)
@@ -387,7 +387,7 @@
switch n.Op {
case OLABEL:
- if !(n.Left != nil) || !(n.Left.Sym != nil) {
+ if n.Left == nil || n.Left.Sym == nil {
Fatal("esc:label without label: %v", Nconv(n, obj.FmtSign))
}
@@ -398,7 +398,7 @@
n.Left.Sym.Label = &nonlooping
case OGOTO:
- if !(n.Left != nil) || !(n.Left.Sym != nil) {
+ if n.Left == nil || n.Left.Sym == nil {
Fatal("esc:goto without label: %v", Nconv(n, obj.FmtSign))
}
@@ -509,7 +509,7 @@
// Everything but fixed array is a dereference.
case ORANGE:
- if Isfixedarray(n.Type) != 0 && n.List != nil && n.List.Next != nil {
+ if Isfixedarray(n.Type) && n.List != nil && n.List.Next != nil {
escassign(e, n.List.Next.N, n.Right)
}
@@ -639,7 +639,7 @@
escassign(e, &e.theSink, n.Left)
case OAPPEND:
- if !(n.Isddd != 0) {
+ if n.Isddd == 0 {
for ll = n.List.Next; ll != nil; ll = ll.Next {
escassign(e, &e.theSink, ll.N) // lose track of assign to dereference
}
@@ -651,7 +651,7 @@
escassign(e, n, n.Left)
case OARRAYLIT:
- if Isslice(n.Type) != 0 {
+ if Isslice(n.Type) {
n.Esc = EscNone // until proven otherwise
e.noesc = list(e.noesc, n)
n.Escloopdepth = e.loopdepth
@@ -708,7 +708,7 @@
continue
}
a = v.Closure
- if !(v.Byval != 0) {
+ if v.Byval == 0 {
a = Nod(OADDR, a, nil)
a.Lineno = v.Lineno
a.Escloopdepth = e.loopdepth
@@ -805,7 +805,6 @@
default:
Dump("dst", dst)
Fatal("escassign: unexpected dst")
- fallthrough
case OARRAYLIT,
OCLOSURE,
@@ -829,7 +828,7 @@
return
case OINDEX:
- if Isfixedarray(dst.Left.Type) != 0 {
+ if Isfixedarray(dst.Left.Type) {
escassign(e, dst.Left, src)
return
}
@@ -914,7 +913,7 @@
// Index of array preserves input value.
case OINDEX:
- if Isfixedarray(src.Left.Type) != 0 {
+ if Isfixedarray(src.Left.Type) {
escassign(e, dst, src.Left)
}
@@ -999,7 +998,6 @@
switch n.Op {
default:
Fatal("esccall")
- fallthrough
case OCALLFUNC:
fn = n.Left
@@ -1044,7 +1042,7 @@
for lr = fn.Ntype.List; ll != nil && lr != nil; (func() { ll = ll.Next; lr = lr.Next })() {
src = ll.N
- if lr.N.Isddd != 0 && !(n.Isddd != 0) {
+ if lr.N.Isddd != 0 && n.Isddd == 0 {
// Introduce ODDDARG node to represent ... allocation.
src = Nod(ODDDARG, nil, nil)
@@ -1110,7 +1108,7 @@
for t = getinargx(fntype).Type; ll != nil; ll = ll.Next {
src = ll.N
- if t.Isddd != 0 && !(n.Isddd != 0) {
+ if t.Isddd != 0 && n.Isddd == 0 {
// Introduce ODDDARG node to represent ... allocation.
src = Nod(ODDDARG, nil, nil)
@@ -1243,7 +1241,7 @@
func escwalk(e *EscState, level int, dst *Node, src *Node) {
var ll *NodeList
- var leaks int
+ var leaks bool
var newlevel int
if src.Walkgen == walkgen && src.Esclevel <= int32(level) {
@@ -1292,11 +1290,11 @@
// The second clause is for values pointed at by an object passed to a call
// that returns something reached via indirect from the object.
// We don't know which result it is or how many indirects, so we treat it as leaking.
- leaks = bool2int(level <= 0 && dst.Escloopdepth < src.Escloopdepth || level < 0 && dst == &e.funcParam && haspointers(src.Type))
+ leaks = level <= 0 && dst.Escloopdepth < src.Escloopdepth || level < 0 && dst == &e.funcParam && haspointers(src.Type)
switch src.Op {
case ONAME:
- if src.Class == PPARAM && (leaks != 0 || dst.Escloopdepth < 0) && src.Esc != EscHeap {
+ if src.Class == PPARAM && (leaks || dst.Escloopdepth < 0) && src.Esc != EscHeap {
src.Esc = EscScope
if Debug['m'] != 0 {
Warnl(int(src.Lineno), "leaking param: %v", Nconv(src, obj.FmtShort))
@@ -1306,7 +1304,7 @@
// Treat a PPARAMREF closure variable as equivalent to the
// original variable.
if src.Class == PPARAMREF {
- if leaks != 0 && Debug['m'] != 0 {
+ if leaks && Debug['m'] != 0 {
Warnl(int(src.Lineno), "leaking closure reference %v", Nconv(src, obj.FmtShort))
}
escwalk(e, level, dst, src.Closure)
@@ -1314,7 +1312,7 @@
case OPTRLIT,
OADDR:
- if leaks != 0 {
+ if leaks {
src.Esc = EscHeap
addrescapes(src.Left)
if Debug['m'] != 0 {
@@ -1329,7 +1327,7 @@
escwalk(e, newlevel, dst, src.Left)
case OARRAYLIT:
- if Isfixedarray(src.Type) != 0 {
+ if Isfixedarray(src.Type) {
break
}
fallthrough
@@ -1349,7 +1347,7 @@
OCLOSURE,
OCALLPART,
ORUNESTR:
- if leaks != 0 {
+ if leaks {
src.Esc = EscHeap
if Debug['m'] != 0 {
Warnl(int(src.Lineno), "%v escapes to heap", Nconv(src, obj.FmtShort))
@@ -1365,7 +1363,7 @@
escwalk(e, level, dst, src.Left)
case OINDEX:
- if Isfixedarray(src.Left.Type) != 0 {
+ if Isfixedarray(src.Left.Type) {
escwalk(e, level, dst, src.Left)
break
}
diff --git a/src/cmd/internal/gc/export.go b/src/cmd/internal/gc/export.go
index 5b34fe2..b0c5931 100644
--- a/src/cmd/internal/gc/export.go
+++ b/src/cmd/internal/gc/export.go
@@ -42,19 +42,19 @@
return unicode.IsUpper(r)
}
-func initname(s string) int {
- return bool2int(s == "init")
+func initname(s string) bool {
+ return s == "init"
}
// exportedsym reports whether a symbol will be visible
// to files that import our package.
-func exportedsym(sym *Sym) int {
+func exportedsym(sym *Sym) bool {
// Builtins are visible everywhere.
if sym.Pkg == builtinpkg || sym.Origpkg == builtinpkg {
- return 1
+ return true
}
- return bool2int(sym.Pkg == localpkg && exportname(sym.Name))
+ return sym.Pkg == localpkg && exportname(sym.Name)
}
func autoexport(n *Node, ctxt int) {
@@ -69,10 +69,10 @@
}
// -A is for cmd/gc/mkbuiltin script, so export everything
- if Debug['A'] != 0 || exportname(n.Sym.Name) || initname(n.Sym.Name) != 0 {
+ if Debug['A'] != 0 || exportname(n.Sym.Name) || initname(n.Sym.Name) {
exportsym(n)
}
- if asmhdr != "" && n.Sym.Pkg == localpkg && !(n.Sym.Flags&SymAsm != 0) {
+ if asmhdr != "" && n.Sym.Pkg == localpkg && n.Sym.Flags&SymAsm == 0 {
n.Sym.Flags |= SymAsm
asmlist = list(asmlist, n)
}
@@ -86,7 +86,7 @@
}
p.Exported = 1
suffix = ""
- if !(p.Direct != 0) {
+ if p.Direct == 0 {
suffix = " // indirect"
}
fmt.Fprintf(bout, "\timport %s \"%v\"%s\n", p.Name, Zconv(p.Path, 0), suffix)
@@ -102,7 +102,7 @@
func reexportdep(n *Node) {
var t *Type
- if !(n != nil) {
+ if n == nil {
return
}
@@ -118,14 +118,14 @@
}
// nodes for method calls.
- if !(n.Type != nil) || n.Type.Thistuple > 0 {
+ if n.Type == nil || n.Type.Thistuple > 0 {
break
}
fallthrough
// fallthrough
case PEXTERN:
- if n.Sym != nil && !(exportedsym(n.Sym) != 0) {
+ if n.Sym != nil && !exportedsym(n.Sym) {
if Debug['E'] != 0 {
fmt.Printf("reexport name %v\n", Sconv(n.Sym, 0))
}
@@ -141,7 +141,7 @@
if Isptr[t.Etype] != 0 {
t = t.Type
}
- if t != nil && t.Sym != nil && t.Sym.Def != nil && !(exportedsym(t.Sym) != 0) {
+ if t != nil && t.Sym != nil && t.Sym.Def != nil && !exportedsym(t.Sym) {
if Debug['E'] != 0 {
fmt.Printf("reexport type %v from declaration\n", Sconv(t.Sym, 0))
}
@@ -155,7 +155,7 @@
if Isptr[t.Etype] != 0 {
t = t.Type
}
- if t != nil && t.Sym != nil && t.Sym.Def != nil && !(exportedsym(t.Sym) != 0) {
+ if t != nil && t.Sym != nil && t.Sym.Def != nil && !exportedsym(t.Sym) {
if Debug['E'] != 0 {
fmt.Printf("reexport literal type %v\n", Sconv(t.Sym, 0))
}
@@ -166,7 +166,7 @@
// fallthrough
case OTYPE:
- if n.Sym != nil && !(exportedsym(n.Sym) != 0) {
+ if n.Sym != nil && !exportedsym(n.Sym) {
if Debug['E'] != 0 {
fmt.Printf("reexport literal/type %v\n", Sconv(n.Sym, 0))
}
@@ -192,10 +192,10 @@
OMAKECHAN:
t = n.Type
- if !(t.Sym != nil) && t.Type != nil {
+ if t.Sym == nil && t.Type != nil {
t = t.Type
}
- if t != nil && t.Sym != nil && t.Sym.Def != nil && !(exportedsym(t.Sym) != 0) {
+ if t != nil && t.Sym != nil && t.Sym.Def != nil && !exportedsym(t.Sym) {
if Debug['E'] != 0 {
fmt.Printf("reexport type for expression %v\n", Sconv(t.Sym, 0))
}
@@ -227,7 +227,7 @@
t = n.Type // may or may not be specified
dumpexporttype(t)
- if t != nil && !(isideal(t) != 0) {
+ if t != nil && !isideal(t) {
fmt.Fprintf(bout, "\tconst %v %v = %v\n", Sconv(s, obj.FmtSharp), Tconv(t, obj.FmtSharp), Vconv(&n.Val, obj.FmtSharp))
} else {
fmt.Fprintf(bout, "\tconst %v = %v\n", Sconv(s, obj.FmtSharp), Vconv(&n.Val, obj.FmtSharp))
@@ -329,7 +329,7 @@
fmt.Fprintf(bout, "\ttype %v %v\n", Sconv(t.Sym, obj.FmtSharp), Tconv(t, obj.FmtSharp|obj.FmtLong))
for i = 0; i < n; i++ {
f = m[i]
- if f.Nointerface != 0 {
+ if f.Nointerface {
fmt.Fprintf(bout, "\t//go:nointerface\n")
}
if f.Type.Nname != nil && f.Type.Nname.Inl != nil { // nname was set by caninl
@@ -428,7 +428,7 @@
// mark the symbol so it is not reexported
if s.Def == nil {
- if exportname(s.Name) || initname(s.Name) != 0 {
+ if exportname(s.Name) || initname(s.Name) {
s.Flags |= SymExport
} else {
s.Flags |= SymPackage // package scope
@@ -474,7 +474,7 @@
Yyerror("conflicting names %s and %s for package \"%v\"", p.Name, s.Name, Zconv(p.Path, 0))
}
- if !(incannedimport != 0) && myimportpath != "" && z.S == myimportpath {
+ if incannedimport == 0 && myimportpath != "" && z.S == myimportpath {
Yyerror("import \"%v\": package depends on \"%v\" (import cycle)", Zconv(importpkg.Path, 0), Zconv(z, 0))
errorexit()
}
diff --git a/src/cmd/internal/gc/fmt.go b/src/cmd/internal/gc/fmt.go
index 08c08a4..3df4bc3 100644
--- a/src/cmd/internal/gc/fmt.go
+++ b/src/cmd/internal/gc/fmt.go
@@ -207,15 +207,15 @@
c = flag & obj.FmtShort
- if !(c != 0) && n.Ullman != 0 {
+ if c == 0 && n.Ullman != 0 {
fp += fmt.Sprintf(" u(%d)", n.Ullman)
}
- if !(c != 0) && n.Addable != 0 {
+ if c == 0 && n.Addable != 0 {
fp += fmt.Sprintf(" a(%d)", n.Addable)
}
- if !(c != 0) && n.Vargen != 0 {
+ if c == 0 && n.Vargen != 0 {
fp += fmt.Sprintf(" g(%d)", n.Vargen)
}
@@ -223,7 +223,7 @@
fp += fmt.Sprintf(" l(%d)", n.Lineno)
}
- if !(c != 0) && n.Xoffset != BADWIDTH {
+ if c == 0 && n.Xoffset != BADWIDTH {
fp += fmt.Sprintf(" x(%d%+d)", n.Xoffset, n.Stkdelta)
}
@@ -261,7 +261,7 @@
fp += fmt.Sprintf(" esc(no)")
case EscNever:
- if !(c != 0) {
+ if c == 0 {
fp += fmt.Sprintf(" esc(N)")
}
@@ -273,11 +273,11 @@
fp += fmt.Sprintf(" ld(%d)", n.Escloopdepth)
}
- if !(c != 0) && n.Typecheck != 0 {
+ if c == 0 && n.Typecheck != 0 {
fp += fmt.Sprintf(" tc(%d)", n.Typecheck)
}
- if !(c != 0) && n.Dodata != 0 {
+ if c == 0 && n.Dodata != 0 {
fp += fmt.Sprintf(" dd(%d)", n.Dodata)
}
@@ -301,7 +301,7 @@
fp += fmt.Sprintf(" assigned")
}
- if !(c != 0) && n.Used != 0 {
+ if c == 0 && n.Used != 0 {
fp += fmt.Sprintf(" used(%d)", n.Used)
}
return fp
@@ -497,7 +497,7 @@
var p string
- if s.Pkg != nil && !(flag&obj.FmtShort != 0 /*untyped*/) {
+ if s.Pkg != nil && flag&obj.FmtShort == 0 /*untyped*/ {
switch fmtmode {
case FErr: // This is for the user
if s.Pkg == localpkg {
@@ -608,7 +608,7 @@
}
// Unless the 'l' flag was specified, if the type has a name, just print that name.
- if !(flag&obj.FmtLong != 0 /*untyped*/) && t.Sym != nil && t.Etype != TFIELD && t != Types[t.Etype] {
+ if flag&obj.FmtLong == 0 /*untyped*/ && t.Sym != nil && t.Etype != TFIELD && t != Types[t.Etype] {
switch fmtmode {
case FTypeId:
if flag&obj.FmtShort != 0 /*untyped*/ {
@@ -802,7 +802,7 @@
return fp
case TFIELD:
- if !(flag&obj.FmtShort != 0 /*untyped*/) {
+ if flag&obj.FmtShort == 0 /*untyped*/ {
s = t.Sym
// Take the name from the original, lest we substituted it with ~r%d or ~b%d.
@@ -822,7 +822,7 @@
}
}
- if s != nil && !(t.Embedded != 0) {
+ if s != nil && t.Embedded == 0 {
if t.Funarg != 0 {
fp += fmt.Sprintf("%v ", Nconv(t.Nname, 0))
} else if flag&obj.FmtLong != 0 /*untyped*/ {
@@ -850,7 +850,7 @@
fp += fmt.Sprintf("%v", Tconv(t.Type, 0))
}
- if !(flag&obj.FmtShort != 0 /*untyped*/) && t.Note != nil {
+ if flag&obj.FmtShort == 0 /*untyped*/ && t.Note != nil {
fp += fmt.Sprintf(" \"%v\"", Zconv(t.Note, 0))
}
return fp
@@ -882,23 +882,23 @@
}
// Statements which may be rendered with a simplestmt as init.
-func stmtwithinit(op int) int {
+func stmtwithinit(op int) bool {
switch op {
case OIF,
OFOR,
OSWITCH:
- return 1
+ return true
}
- return 0
+ return false
}
func stmtfmt(n *Node) string {
var f string
- var complexinit int
- var simpleinit int
- var extrablock int
+ var complexinit bool
+ var simpleinit bool
+ var extrablock bool
// some statements allow for an init, but at most one,
// but we may have an arbitrary number added, eg by typecheck
@@ -906,19 +906,19 @@
// block starting with the init statements.
// if we can just say "for" n->ninit; ... then do so
- simpleinit = bool2int(n.Ninit != nil && !(n.Ninit.Next != nil) && !(n.Ninit.N.Ninit != nil) && stmtwithinit(int(n.Op)) != 0)
+ simpleinit = n.Ninit != nil && n.Ninit.Next == nil && n.Ninit.N.Ninit == nil && stmtwithinit(int(n.Op))
// otherwise, print the inits as separate statements
- complexinit = bool2int(n.Ninit != nil && !(simpleinit != 0) && (fmtmode != FErr))
+ complexinit = n.Ninit != nil && !simpleinit && (fmtmode != FErr)
// but if it was for if/for/switch, put in an extra surrounding block to limit the scope
- extrablock = bool2int(complexinit != 0 && stmtwithinit(int(n.Op)) != 0)
+ extrablock = complexinit && stmtwithinit(int(n.Op))
- if extrablock != 0 {
+ if extrablock {
f += "{"
}
- if complexinit != 0 {
+ if complexinit {
f += fmt.Sprintf(" %v; ", Hconv(n.Ninit, 0))
}
@@ -951,7 +951,7 @@
break
}
- if n.Colas != 0 && !(complexinit != 0) {
+ if n.Colas != 0 && !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))
@@ -970,7 +970,7 @@
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 != 0) {
+ if n.Colas != 0 && !complexinit {
f += fmt.Sprintf("%v := %v", Hconv(n.List, obj.FmtComma), Hconv(n.Rlist, obj.FmtComma))
break
}
@@ -996,7 +996,7 @@
f += fmt.Sprintf("defer %v", Nconv(n.Left, 0))
case OIF:
- if simpleinit != 0 {
+ if simpleinit {
f += fmt.Sprintf("if %v; %v { %v }", Nconv(n.Ninit.N, 0), Nconv(n.Ntest, 0), Hconv(n.Nbody, 0))
} else {
f += fmt.Sprintf("if %v { %v }", Nconv(n.Ntest, 0), Hconv(n.Nbody, 0))
@@ -1012,7 +1012,7 @@
}
f += "for"
- if simpleinit != 0 {
+ if simpleinit {
f += fmt.Sprintf(" %v;", Nconv(n.Ninit.N, 0))
} else if n.Nincr != nil {
f += " ;"
@@ -1024,7 +1024,7 @@
if n.Nincr != nil {
f += fmt.Sprintf("; %v", Nconv(n.Nincr, 0))
- } else if simpleinit != 0 {
+ } else if simpleinit {
f += ";"
}
@@ -1051,7 +1051,7 @@
}
f += fmt.Sprintf("%v", Oconv(int(n.Op), obj.FmtSharp))
- if simpleinit != 0 {
+ if simpleinit {
f += fmt.Sprintf(" %v;", Nconv(n.Ninit.N, 0))
}
if n.Ntest != nil {
@@ -1087,7 +1087,7 @@
}
ret:
- if extrablock != 0 {
+ if extrablock {
f += "}"
}
@@ -1211,7 +1211,7 @@
var f string
var nprec int
- var ptrlit int
+ var ptrlit bool
var l *NodeList
for n != nil && n.Implicit != 0 && (n.Op == OIND || n.Op == OADDR) {
@@ -1368,10 +1368,10 @@
return f
case OCOMPLIT:
- ptrlit = bool2int(n.Right != nil && n.Right.Implicit != 0 && n.Right.Type != nil && Isptr[n.Right.Type.Etype] != 0)
+ ptrlit = n.Right != nil && n.Right.Implicit != 0 && n.Right.Type != nil && Isptr[n.Right.Type.Etype] != 0
if fmtmode == FErr {
- if n.Right != nil && n.Right.Type != nil && !(n.Implicit != 0) {
- if ptrlit != 0 {
+ if n.Right != nil && n.Right.Type != nil && n.Implicit == 0 {
+ if ptrlit {
f += fmt.Sprintf("&%v literal", Tconv(n.Right.Type.Type, 0))
return f
} else {
@@ -1384,7 +1384,7 @@
return f
}
- if fmtmode == FExp && ptrlit != 0 {
+ if fmtmode == FExp && ptrlit {
// typecheck has overwritten OIND by OTYPE with pointer type.
f += fmt.Sprintf("(&%v{ %v })", Tconv(n.Right.Type.Type, 0), Hconv(n.List, obj.FmtComma))
return f
@@ -1418,7 +1418,7 @@
}
}
- if !(n.Implicit != 0) {
+ if n.Implicit == 0 {
f += "})"
return f
}
@@ -1454,11 +1454,11 @@
}
}
- if !(n.Left != nil) && n.Right != nil {
+ if n.Left == nil && n.Right != nil {
f += fmt.Sprintf(":%v", Nconv(n.Right, 0))
return f
}
- if n.Left != nil && !(n.Right != nil) {
+ if n.Left != nil && n.Right == nil {
f += fmt.Sprintf("%v:", Nconv(n.Left, 0))
return f
}
@@ -1686,15 +1686,15 @@
func nodedump(n *Node, flag int) string {
var fp string
- var recur int
+ var recur bool
if n == nil {
return fp
}
- recur = bool2int(!(flag&obj.FmtShort != 0 /*untyped*/))
+ recur = flag&obj.FmtShort == 0 /*untyped*/
- if recur != 0 {
+ if recur {
fp = indent(fp)
if dumpdepth > 10 {
fp += "..."
@@ -1727,7 +1727,7 @@
} else {
fp += fmt.Sprintf("%v%v", Oconv(int(n.Op), 0), Jconv(n, 0))
}
- if recur != 0 && n.Type == nil && n.Ntype != nil {
+ if recur && n.Type == nil && n.Ntype != nil {
fp = indent(fp)
fp += fmt.Sprintf("%v-ntype%v", Oconv(int(n.Op), 0), Nconv(n.Ntype, 0))
}
@@ -1737,7 +1737,7 @@
case OTYPE:
fp += fmt.Sprintf("%v %v%v type=%v", Oconv(int(n.Op), 0), Sconv(n.Sym, 0), Jconv(n, 0), Tconv(n.Type, 0))
- if recur != 0 && n.Type == nil && n.Ntype != nil {
+ if recur && n.Type == nil && n.Ntype != nil {
fp = indent(fp)
fp += fmt.Sprintf("%v-ntype%v", Oconv(int(n.Op), 0), Nconv(n.Ntype, 0))
}
@@ -1751,7 +1751,7 @@
fp += fmt.Sprintf(" %v", Tconv(n.Type, 0))
}
- if recur != 0 {
+ if recur {
if n.Left != nil {
fp += fmt.Sprintf("%v", Nconv(n.Left, 0))
}
diff --git a/src/cmd/internal/gc/gen.go b/src/cmd/internal/gc/gen.go
index a40a347..9d41b6f 100644
--- a/src/cmd/internal/gc/gen.go
+++ b/src/cmd/internal/gc/gen.go
@@ -109,7 +109,7 @@
// is always a heap pointer anyway.
case ODOT,
OINDEX:
- if !(Isslice(n.Left.Type) != 0) {
+ if !Isslice(n.Left.Type) {
addrescapes(n.Left)
}
}
@@ -253,7 +253,6 @@
switch n.Left.Op {
default:
Fatal("cgen_proc: unknown call %v", Oconv(int(n.Left.Op), 0))
- fallthrough
case OCALLMETH:
Cgen_callmeth(n.Left, proc)
@@ -280,7 +279,7 @@
Fatal("cgen_dcl")
}
- if !(n.Class&PHEAP != 0) {
+ if n.Class&PHEAP == 0 {
return
}
if compiling_runtime != 0 {
@@ -304,7 +303,7 @@
switch nr.Op {
case ONAME:
- if !(nr.Class&PHEAP != 0) && nr.Class != PEXTERN && nr.Class != PFUNC && nr.Class != PPARAMREF {
+ if nr.Class&PHEAP == 0 && nr.Class != PEXTERN && nr.Class != PFUNC && nr.Class != PPARAMREF {
gused(nr)
}
@@ -480,7 +479,7 @@
tmpcap = tmplen
}
- if isnil(n.Left) != 0 {
+ if isnil(n.Left) {
Tempname(&src, n.Left.Type)
Thearch.Cgen(n.Left, &src)
} else {
@@ -491,7 +490,7 @@
}
if n.Op == OSLICEARR || n.Op == OSLICE3ARR {
- if !(Isptr[n.Left.Type.Etype] != 0) {
+ if Isptr[n.Left.Type.Etype] == 0 {
Fatal("slicearr is supposed to work on pointer: %v\n", Nconv(n, obj.FmtSign))
}
Thearch.Cgen(&src, base)
@@ -668,13 +667,12 @@
var p2 *obj.Prog
var p3 *obj.Prog
var lab *Label
- var wasregalloc int32
//dump("gen", n);
lno = setlineno(n)
- wasregalloc = int32(Thearch.Anyregalloc())
+ wasregalloc := Thearch.Anyregalloc()
if n == nil {
goto ret
@@ -879,7 +877,7 @@
cgen_dcl(n.Left)
case OAS:
- if gen_as_init(n) != 0 {
+ if gen_as_init(n) {
break
}
Cgen_as(n.Left, n.Right)
@@ -911,7 +909,7 @@
}
ret:
- if int32(Thearch.Anyregalloc()) != wasregalloc {
+ if Thearch.Anyregalloc() != wasregalloc {
Dump("node", n)
Fatal("registers left allocated")
}
@@ -936,7 +934,7 @@
return
}
- if nr == nil || iszero(nr) != 0 {
+ if nr == nil || iszero(nr) {
// heaps should already be clear
if nr == nil && (nl.Class&PHEAP != 0) {
return
@@ -946,7 +944,7 @@
if tl == nil {
return
}
- if Isfat(tl) != 0 {
+ if Isfat(tl) {
if nl.Op == ONAME {
Gvardef(nl)
}
@@ -1002,7 +1000,7 @@
continue
}
- if lab.Use == nil && !(lab.Used != 0) {
+ if lab.Use == nil && lab.Used == 0 {
yyerrorl(int(lab.Def.Lineno), "label %v defined and not used", Sconv(lab.Sym, 0))
continue
}
diff --git a/src/cmd/internal/gc/go.go b/src/cmd/internal/gc/go.go
index ff1a429..16cc449 100644
--- a/src/cmd/internal/gc/go.go
+++ b/src/cmd/internal/gc/go.go
@@ -7,7 +7,6 @@
import (
"bytes"
"cmd/internal/obj"
- "encoding/binary"
)
// Copyright 2009 The Go Authors. All rights reserved.
@@ -162,7 +161,7 @@
Addable uint8
Trecur uint8
Etype uint8
- Bounded uint8
+ Bounded bool
Class uint8
Method uint8
Embedded uint8
@@ -191,7 +190,7 @@
Likely int8
Hasbreak uint8
Needzero uint8
- Needctxt uint8
+ Needctxt bool
Esc uint
Funcdepth int
Type *Type
@@ -245,7 +244,7 @@
type Type struct {
Etype uint8
- Nointerface uint8
+ Nointerface bool
Noalg uint8
Chan uint8
Trecur uint8
@@ -918,6 +917,10 @@
var Use_sse int
+var hunk string
+
+var nhunk int32
+
var thunk int32
var Funcdepth int
@@ -1119,7 +1122,6 @@
)
type Arch struct {
- ByteOrder binary.ByteOrder
Thechar int
Thestring string
Thelinkarch *obj.LinkArch
@@ -1127,7 +1129,7 @@
REGSP int
REGCTXT int
MAXWIDTH int64
- Anyregalloc func() int
+ Anyregalloc func() bool
Betypeinit func()
Bgen func(*Node, bool, int, *obj.Prog)
Cgen func(*Node, *Node)
@@ -1148,10 +1150,10 @@
Proginfo func(*ProgInfo, *obj.Prog)
Regalloc func(*Node, *Type, *Node)
Regfree func(*Node)
- Regtyp func(*obj.Addr) int
- Sameaddr func(*obj.Addr, *obj.Addr) int
- Smallindir func(*obj.Addr, *obj.Addr) int
- Stackaddr func(*obj.Addr) int
+ Regtyp func(*obj.Addr) bool
+ Sameaddr func(*obj.Addr, *obj.Addr) bool
+ Smallindir func(*obj.Addr, *obj.Addr) bool
+ Stackaddr func(*obj.Addr) bool
Excludedregs func() uint64
RtoB func(int) uint64
FtoB func(int) uint64
diff --git a/src/cmd/internal/gc/gsubr.go b/src/cmd/internal/gc/gsubr.go
index 6762171..6fd6057 100644
--- a/src/cmd/internal/gc/gsubr.go
+++ b/src/cmd/internal/gc/gsubr.go
@@ -41,7 +41,7 @@
/*
* Is this node a memory operand?
*/
-func Ismem(n *Node) int {
+func Ismem(n *Node) bool {
switch n.Op {
case OITAB,
OSPTR,
@@ -51,29 +51,29 @@
ONAME,
OPARAM,
OCLOSUREVAR:
- return 1
+ return true
case OADDR:
- return bool2int(Thearch.Thechar == '6' || Thearch.Thechar == '9') // because 6g uses PC-relative addressing; TODO(rsc): not sure why 9g too
+ return Thearch.Thechar == '6' || Thearch.Thechar == '9' // because 6g uses PC-relative addressing; TODO(rsc): not sure why 9g too
}
- return 0
+ return false
}
-func Samereg(a *Node, b *Node) int {
+func Samereg(a *Node, b *Node) bool {
if a == nil || b == nil {
- return 0
+ return false
}
if a.Op != OREGISTER {
- return 0
+ return false
}
if b.Op != OREGISTER {
- return 0
+ return false
}
if a.Val.U.Reg != b.Val.U.Reg {
- return 0
+ return false
}
- return 1
+ return true
}
/*
@@ -174,15 +174,15 @@
for lp = &p; ; {
p = *lp
- if !(p != nil) {
+ if p == nil {
break
}
- if p.As == obj.ATYPE && p.From.Node != nil && p.From.Name == obj.NAME_AUTO && !(((p.From.Node).(*Node)).Used != 0) {
+ if p.As == obj.ATYPE && p.From.Node != nil && p.From.Name == obj.NAME_AUTO && ((p.From.Node).(*Node)).Used == 0 {
*lp = p.Link
continue
}
- if (p.As == obj.AVARDEF || p.As == obj.AVARKILL) && p.To.Node != nil && !(((p.To.Node).(*Node)).Used != 0) {
+ if (p.As == obj.AVARDEF || p.As == obj.AVARKILL) && p.To.Node != nil && ((p.To.Node).(*Node)).Used == 0 {
// Cannot remove VARDEF instruction, because - unlike TYPE handled above -
// VARDEFs are interspersed with other code, and a jump might be using the
// VARDEF as a target. Replace with a no-op instead. A later pass will remove
@@ -256,18 +256,18 @@
Thearch.Gins(obj.ANOP, n, nil) // used
}
-func Isfat(t *Type) int {
+func Isfat(t *Type) bool {
if t != nil {
switch t.Etype {
case TSTRUCT,
TARRAY,
TSTRING,
TINTER: // maybe remove later
- return 1
+ return true
}
}
- return 0
+ return false
}
func markautoused(p *obj.Prog) {
@@ -289,7 +289,7 @@
func Naddr(n *Node, a *obj.Addr, canemitcode int) {
var s *Sym
- *a = obj.Zprog.From
+ *a = obj.Addr{}
if n == nil {
return
}
@@ -343,7 +343,7 @@
a.Node = n.Left.Orig
case OCLOSUREVAR:
- if !(Curfn.Needctxt != 0) {
+ if !Curfn.Needctxt {
Fatal("closurevar without needctxt")
}
a.Type = obj.TYPE_MEM
@@ -383,7 +383,6 @@
switch n.Class {
default:
Fatal("naddr: ONAME class %v %d\n", Sconv(n.Sym, 0), n.Class)
- fallthrough
case PEXTERN:
a.Name = obj.NAME_EXTERN
diff --git a/src/cmd/internal/gc/init.go b/src/cmd/internal/gc/init.go
index e738dba..2805f39 100644
--- a/src/cmd/internal/gc/init.go
+++ b/src/cmd/internal/gc/init.go
@@ -53,7 +53,7 @@
* return (11)
* }
*/
-func anyinit(n *NodeList) int {
+func anyinit(n *NodeList) bool {
var h uint32
var s *Sym
var l *NodeList
@@ -68,20 +68,20 @@
break
case OAS:
- if isblank(l.N.Left) && candiscard(l.N.Right) != 0 {
+ if isblank(l.N.Left) && candiscard(l.N.Right) {
break
}
fallthrough
// fall through
default:
- return 1
+ return true
}
}
// is this main
if localpkg.Name == "main" {
- return 1
+ return true
}
// is there an explicit init function
@@ -89,7 +89,7 @@
s = Lookup(namebuf)
if s.Def != nil {
- return 1
+ return true
}
// are there any imported init functions
@@ -101,12 +101,12 @@
if s.Def == nil {
continue
}
- return 1
+ return true
}
}
// then none
- return 0
+ return false
}
func fninit(n *NodeList) {
@@ -126,7 +126,7 @@
}
n = initfix(n)
- if !(anyinit(n) != 0) {
+ if !anyinit(n) {
return
}
diff --git a/src/cmd/internal/gc/inl.go b/src/cmd/internal/gc/inl.go
index 1b4b40d..73d6481 100644
--- a/src/cmd/internal/gc/inl.go
+++ b/src/cmd/internal/gc/inl.go
@@ -56,7 +56,7 @@
if Isptr[rcvr.Etype] != 0 {
rcvr = rcvr.Type
}
- if !(rcvr.Sym != nil) {
+ if rcvr.Sym == nil {
Fatal("receiver with no sym: [%v] %v (%v)", Sconv(fn.Sym, 0), Nconv(fn, obj.FmtLong), Tconv(rcvr, 0))
}
return rcvr.Sym.Pkg
@@ -114,7 +114,7 @@
if fn.Op != ODCLFUNC {
Fatal("caninl %v", Nconv(fn, 0))
}
- if !(fn.Nname != nil) {
+ if fn.Nname == nil {
Fatal("caninl no nname %v", Nconv(fn, obj.FmtSign))
}
@@ -137,7 +137,7 @@
}
budget = 40 // allowed hairyness
- if ishairylist(fn.Nbody, &budget) != 0 {
+ if ishairylist(fn.Nbody, &budget) {
return
}
@@ -162,18 +162,18 @@
}
// Look for anything we want to punt on.
-func ishairylist(ll *NodeList, budget *int) int {
+func ishairylist(ll *NodeList, budget *int) bool {
for ; ll != nil; ll = ll.Next {
- if ishairy(ll.N, budget) != 0 {
- return 1
+ if ishairy(ll.N, budget) {
+ return true
}
}
- return 0
+ return false
}
-func ishairy(n *Node, budget *int) int {
- if !(n != nil) {
- return 0
+func ishairy(n *Node, budget *int) bool {
+ if n == nil {
+ return false
}
// Things that are too hairy, irrespective of the budget
@@ -185,7 +185,7 @@
OPANIC,
ORECOVER:
if Debug['l'] < 4 {
- return 1
+ return true
}
case OCLOSURE,
@@ -199,12 +199,12 @@
ODCLTYPE, // can't print yet
ODCLCONST, // can't print yet
ORETJMP:
- return 1
+ return true
}
(*budget)--
- return bool2int(*budget < 0 || ishairy(n.Left, budget) != 0 || ishairy(n.Right, budget) != 0 || ishairylist(n.List, budget) != 0 || ishairylist(n.Rlist, budget) != 0 || ishairylist(n.Ninit, budget) != 0 || ishairy(n.Ntest, budget) != 0 || ishairy(n.Nincr, budget) != 0 || ishairylist(n.Nbody, budget) != 0 || ishairylist(n.Nelse, budget) != 0)
+ return *budget < 0 || ishairy(n.Left, budget) || ishairy(n.Right, budget) || ishairylist(n.List, budget) || ishairylist(n.Rlist, budget) || ishairylist(n.Ninit, budget) || ishairy(n.Ntest, budget) || ishairy(n.Nincr, budget) || ishairylist(n.Nbody, budget) || ishairylist(n.Nelse, budget)
}
// Inlcopy and inlcopylist recursively copy the body of a function.
@@ -506,7 +506,7 @@
func tinlvar(t *Type) *Node {
if t.Nname != nil && !isblank(t.Nname) {
- if !(t.Nname.Inlvar != nil) {
+ if t.Nname.Inlvar == nil {
Fatal("missing inlvar for %v\n", Nconv(t.Nname, 0))
}
return t.Nname.Inlvar
@@ -524,7 +524,7 @@
// parameters.
func mkinlcall1(np **Node, fn *Node, isddd int) {
var i int
- var chkargcount int
+ var chkargcount bool
var n *Node
var call *Node
var saveinlfn *Node
@@ -535,7 +535,7 @@
var ninit *NodeList
var body *NodeList
var t *Type
- var variadic int
+ var variadic bool
var varargcount int
var multiret int
var vararg *Node
@@ -623,10 +623,10 @@
// method call with a receiver.
t = getthisx(fn.Type).Type
- if t != nil && t.Nname != nil && !isblank(t.Nname) && !(t.Nname.Inlvar != nil) {
+ if t != nil && t.Nname != nil && !isblank(t.Nname) && t.Nname.Inlvar == nil {
Fatal("missing inlvar for %v\n", Nconv(t.Nname, 0))
}
- if !(n.Left.Left != nil) {
+ if n.Left.Left == nil {
Fatal("method call without receiver: %v", Nconv(n, obj.FmtSign))
}
if t == nil {
@@ -640,26 +640,26 @@
}
// check if inlined function is variadic.
- variadic = 0
+ variadic = false
varargtype = nil
varargcount = 0
for t = fn.Type.Type.Down.Down.Type; t != nil; t = t.Down {
if t.Isddd != 0 {
- variadic = 1
+ variadic = true
varargtype = t.Type
}
}
// but if argument is dotted too forget about variadicity.
- if variadic != 0 && isddd != 0 {
- variadic = 0
+ if variadic && isddd != 0 {
+ variadic = false
}
// check if argument is actually a returned tuple from call.
multiret = 0
- if n.List != nil && !(n.List.Next != nil) {
+ if n.List != nil && n.List.Next == nil {
switch n.List.N.Op {
case OCALL,
OCALLFUNC,
@@ -671,7 +671,7 @@
}
}
- if variadic != 0 {
+ if variadic {
varargcount = count(n.List) + multiret
if n.Left.Op != ODOTMETH {
varargcount -= fn.Type.Thistuple
@@ -688,14 +688,14 @@
// TODO: if len(nlist) == 1 but multiple args, check that n->list->n is a call?
if fn.Type.Thistuple != 0 && n.Left.Op != ODOTMETH {
// non-method call to method
- if !(n.List != nil) {
+ if n.List == nil {
Fatal("non-method call to method without first arg: %v", Nconv(n, obj.FmtSign))
}
// append receiver inlvar to LHS.
t = getthisx(fn.Type).Type
- if t != nil && t.Nname != nil && !isblank(t.Nname) && !(t.Nname.Inlvar != nil) {
+ if t != nil && t.Nname != nil && !isblank(t.Nname) && t.Nname.Inlvar == nil {
Fatal("missing inlvar for %v\n", Nconv(t.Nname, 0))
}
if t == nil {
@@ -706,14 +706,14 @@
}
// append ordinary arguments to LHS.
- chkargcount = bool2int(n.List != nil && n.List.Next != nil)
+ chkargcount = n.List != nil && n.List.Next != nil
vararg = nil // the slice argument to a variadic call
varargs = nil // the list of LHS names to put in vararg.
- if !(chkargcount != 0) {
+ if !chkargcount {
// 0 or 1 expression on RHS.
for t = getinargx(fn.Type).Type; t != nil; t = t.Down {
- if variadic != 0 && t.Isddd != 0 {
+ if variadic && t.Isddd != 0 {
vararg = tinlvar(t)
for i = 0; i < varargcount && ll != nil; i++ {
m = argvar(varargtype, i)
@@ -729,10 +729,10 @@
} else {
// match arguments except final variadic (unless the call is dotted itself)
for t = getinargx(fn.Type).Type; t != nil; {
- if !(ll != nil) {
+ if ll == nil {
break
}
- if variadic != 0 && t.Isddd != 0 {
+ if variadic && t.Isddd != 0 {
break
}
as.List = list(as.List, tinlvar(t))
@@ -741,7 +741,7 @@
}
// match varargcount arguments with variadic parameters.
- if variadic != 0 && t != nil && t.Isddd != 0 {
+ if variadic && t != nil && t.Isddd != 0 {
vararg = tinlvar(t)
for i = 0; i < varargcount && ll != nil; i++ {
m = argvar(varargtype, i)
@@ -766,9 +766,9 @@
}
// turn the variadic args into a slice.
- if variadic != 0 {
+ if variadic {
as = Nod(OAS, vararg, nil)
- if !(varargcount != 0) {
+ if varargcount == 0 {
as.Right = nodnil()
as.Right.Type = varargtype
} else {
@@ -1019,7 +1019,7 @@
}
func setlno(n *Node, lno int) {
- if !(n != nil) {
+ if n == nil {
return
}
diff --git a/src/cmd/internal/gc/lex.go b/src/cmd/internal/gc/lex.go
index 98cebe8..651ba5f 100644
--- a/src/cmd/internal/gc/lex.go
+++ b/src/cmd/internal/gc/lex.go
@@ -504,20 +504,20 @@
return i
}
-func skiptopkgdef(b *obj.Biobuf) int {
+func skiptopkgdef(b *obj.Biobuf) bool {
var p string
var sz int
/* archive header */
p = obj.Brdline(b, '\n')
if p == "" {
- return 0
+ return false
}
if obj.Blinelen(b) != 8 {
- return 0
+ return false
}
if p != "!<arch>\n" {
- return 0
+ return false
}
/* symbol table may be first; skip it */
@@ -533,9 +533,9 @@
sz = arsize(b, "__.PKGDEF")
if sz <= 0 {
- return 0
+ return false
}
- return 1
+ return true
}
func addidir(dir string) {
@@ -560,7 +560,7 @@
strings.HasPrefix(name.S, "../") || name.S == ".."
}
-func findpkg(name *Strlit) int {
+func findpkg(name *Strlit) bool {
var p *Idir
var q string
var suffix string
@@ -568,7 +568,7 @@
if islocalname(name) {
if safemode != 0 || nolocalimports != 0 {
- return 0
+ return false
}
// try .a before .6. important for building libraries:
@@ -577,13 +577,13 @@
namebuf = fmt.Sprintf("%v.a", Zconv(name, 0))
if obj.Access(namebuf, 0) >= 0 {
- return 1
+ return true
}
namebuf = fmt.Sprintf("%v.%c", Zconv(name, 0), Thearch.Thechar)
if obj.Access(namebuf, 0) >= 0 {
- return 1
+ return true
}
- return 0
+ return false
}
// local imports should be canonicalized already.
@@ -592,17 +592,17 @@
_ = q
if path.Clean(name.S) != name.S {
Yyerror("non-canonical import path %v (should be %s)", Zconv(name, 0), q)
- return 0
+ return false
}
for p = idirs; p != nil; p = p.link {
namebuf = fmt.Sprintf("%s/%v.a", p.dir, Zconv(name, 0))
if obj.Access(namebuf, 0) >= 0 {
- return 1
+ return true
}
namebuf = fmt.Sprintf("%s/%v.%c", p.dir, Zconv(name, 0), Thearch.Thechar)
if obj.Access(namebuf, 0) >= 0 {
- return 1
+ return true
}
}
@@ -619,15 +619,15 @@
namebuf = fmt.Sprintf("%s/pkg/%s_%s%s%s/%v.a", goroot, goos, goarch, suffixsep, suffix, Zconv(name, 0))
if obj.Access(namebuf, 0) >= 0 {
- return 1
+ return true
}
namebuf = fmt.Sprintf("%s/pkg/%s_%s%s%s/%v.%c", goroot, goos, goarch, suffixsep, suffix, Zconv(name, 0), Thearch.Thechar)
if obj.Access(namebuf, 0) >= 0 {
- return 1
+ return true
}
}
- return 0
+ return false
}
func fakeimport() {
@@ -714,7 +714,7 @@
}
}
- if !(findpkg(path_) != 0) {
+ if !findpkg(path_) {
Yyerror("can't find import: \"%v\"", Zconv(f.U.Sval, 0))
errorexit()
}
@@ -748,7 +748,7 @@
n = len(namebuf)
if n > 2 && namebuf[n-2] == '.' && namebuf[n-1] == 'a' {
- if !(skiptopkgdef(imp) != 0) {
+ if !skiptopkgdef(imp) {
Yyerror("import %s: not a package file", file)
errorexit()
}
@@ -946,7 +946,7 @@
for {
- if escchar('"', &escflag, &v) != 0 {
+ if escchar('"', &escflag, &v) {
break
}
if v < utf8.RuneSelf || escflag != 0 {
@@ -988,12 +988,12 @@
/* '.' */
case '\'':
- if escchar('\'', &escflag, &v) != 0 {
+ if escchar('\'', &escflag, &v) {
Yyerror("empty character literal or unescaped ' in character literal")
v = '\''
}
- if !(escchar('\'', &escflag, &v) != 0) {
+ if !escchar('\'', &escflag, &v) {
Yyerror("missing '")
ungetc(int(v))
}
@@ -1629,7 +1629,7 @@
}
if verb == "go:linkname" {
- if !(imported_unsafe != 0) {
+ if imported_unsafe == 0 {
Yyerror("//go:linkname only allowed in Go files that import \"unsafe\"")
}
f := strings.Fields(cmd)
@@ -1658,7 +1658,7 @@
}
if verb == "go:nowritebarrier" {
- if !(compiling_runtime != 0) {
+ if compiling_runtime == 0 {
Yyerror("//go:nowritebarrier only allowed in runtime")
}
nowritebarrier = true
@@ -1961,7 +1961,7 @@
}
}
-func escchar(e int, escflg *int, val *int64) int {
+func escchar(e int, escflg *int, val *int64) bool {
var i int
var u int
var c int
@@ -1973,21 +1973,21 @@
switch c {
case EOF:
Yyerror("eof in string")
- return 1
+ return true
case '\n':
Yyerror("newline in string")
- return 1
+ return true
case '\\':
break
default:
if c == e {
- return 1
+ return true
}
*val = int64(c)
- return 0
+ return false
}
u = 0
@@ -2043,7 +2043,7 @@
}
*val = int64(c)
- return 0
+ return false
hex:
l = 0
@@ -2075,7 +2075,7 @@
}
*val = l
- return 0
+ return false
oct:
l = int64(c) - '0'
@@ -2095,7 +2095,7 @@
}
*val = l
- return 0
+ return false
}
var syms = []struct {
@@ -2530,12 +2530,12 @@
idealbool = typ(TBOOL)
s = Pkglookup("true", builtinpkg)
- s.Def = Nodbool(1)
+ s.Def = Nodbool(true)
s.Def.Sym = Lookup("true")
s.Def.Type = idealbool
s = Pkglookup("false", builtinpkg)
- s.Def = Nodbool(0)
+ s.Def = Nodbool(false)
s.Def.Sym = Lookup("false")
s.Def.Type = idealbool
@@ -2704,14 +2704,14 @@
s = Lookup("true")
if s.Def == nil {
- s.Def = Nodbool(1)
+ s.Def = Nodbool(true)
s.Def.Sym = s
s.Origpkg = builtinpkg
}
s = Lookup("false")
if s.Def == nil {
- s.Def = Nodbool(0)
+ s.Def = Nodbool(false)
s.Def.Sym = s
s.Origpkg = builtinpkg
}
@@ -3163,7 +3163,7 @@
// leave s->block set to cause redeclaration
// errors if a conflicting top-level name is
// introduced by a different file.
- if !(s.Def.Used != 0) && !(nsyntaxerrors != 0) {
+ if s.Def.Used == 0 && nsyntaxerrors == 0 {
pkgnotused(int(s.Def.Lineno), s.Def.Pkg.Path, s.Name)
}
s.Def = nil
@@ -3173,7 +3173,7 @@
if s.Def.Sym != s {
// throw away top-level name left over
// from previous import . "x"
- if s.Def.Pack != nil && !(s.Def.Pack.Used != 0) && !(nsyntaxerrors != 0) {
+ if s.Def.Pack != nil && s.Def.Pack.Used == 0 && nsyntaxerrors == 0 {
pkgnotused(int(s.Def.Pack.Lineno), s.Def.Pack.Pkg.Path, "")
s.Def.Pack.Used = 1
}
diff --git a/src/cmd/internal/gc/mparith2.go b/src/cmd/internal/gc/mparith2.go
index 415adf0..057585c 100644
--- a/src/cmd/internal/gc/mparith2.go
+++ b/src/cmd/internal/gc/mparith2.go
@@ -44,7 +44,7 @@
}
a.Ovf = uint8(c)
- if a.Ovf != 0 && !(quiet != 0) {
+ if a.Ovf != 0 && quiet == 0 {
Yyerror("constant shift overflow")
}
}
@@ -59,7 +59,7 @@
i = Mpprec - 1
if a.A[i] != 0 {
a.Ovf = 1
- if !(quiet != 0) {
+ if quiet == 0 {
Yyerror("constant shift overflow")
}
}
@@ -223,7 +223,7 @@
}
a.Ovf = uint8(c)
- if a.Ovf != 0 && !(quiet != 0) {
+ if a.Ovf != 0 && quiet == 0 {
Yyerror("constant addition overflow")
}
@@ -663,15 +663,15 @@
q.Neg = uint8(ns ^ ds)
}
-func mpiszero(a *Mpint) int {
+func mpiszero(a *Mpint) bool {
var i int
for i = Mpprec - 1; i >= 0; i-- {
if a.A[i] != 0 {
- return 0
+ return false
}
}
- return 1
+ return true
}
func mpdivfract(a *Mpint, b *Mpint) {
@@ -694,7 +694,7 @@
for j = 0; j < Mpscale; j++ {
x <<= 1
if mpcmp(&d, &n) <= 0 {
- if !(mpiszero(&d) != 0) {
+ if !mpiszero(&d) {
x |= 1
}
mpsubfixfix(&n, &d)
diff --git a/src/cmd/internal/gc/order.go b/src/cmd/internal/gc/order.go
index 6f18952..743ca80 100644
--- a/src/cmd/internal/gc/order.go
+++ b/src/cmd/internal/gc/order.go
@@ -62,13 +62,13 @@
// Ordertemp allocates a new temporary with the given type,
// pushes it onto the temp stack, and returns it.
// If clear is true, ordertemp emits code to zero the temporary.
-func ordertemp(t *Type, order *Order, clear int) *Node {
+func ordertemp(t *Type, order *Order, clear bool) *Node {
var var_ *Node
var a *Node
var l *NodeList
var_ = temp(t)
- if clear != 0 {
+ if clear {
a = Nod(OAS, var_, nil)
typecheck(&a, Etop)
order.out = list(order.out, a)
@@ -101,7 +101,7 @@
var a *Node
var var_ *Node
- var_ = ordertemp(t, order, clear)
+ var_ = ordertemp(t, order, clear != 0)
a = Nod(OAS, var_, n)
typecheck(&a, Etop)
order.out = list(order.out, a)
@@ -135,10 +135,6 @@
var a *Node
switch n.Op {
- default:
- Fatal("ordersafeexpr %v", Oconv(int(n.Op), 0))
- fallthrough
-
case ONAME,
OLITERAL:
return n
@@ -170,7 +166,7 @@
case OINDEX,
OINDEXMAP:
- if Isfixedarray(n.Left.Type) != 0 {
+ if Isfixedarray(n.Left.Type) {
l = ordersafeexpr(n.Left, order)
} else {
l = ordercheapexpr(n.Left, order)
@@ -187,14 +183,17 @@
typecheck(&a, Erv)
return a
}
+
+ Fatal("ordersafeexpr %v", Oconv(int(n.Op), 0))
+ return nil // not reached
}
// Istemp reports whether n is a temporary variable.
-func istemp(n *Node) int {
+func istemp(n *Node) bool {
if n.Op != ONAME {
- return 0
+ return false
}
- return bool2int(strings.HasPrefix(n.Sym.Name, "autotmp_"))
+ return strings.HasPrefix(n.Sym.Name, "autotmp_")
}
// Isaddrokay reports whether it is okay to pass n's address to runtime routines.
@@ -203,8 +202,8 @@
// of ordinary stack variables, those are not 'isaddrokay'. Temporaries are okay,
// because we emit explicit VARKILL instructions marking the end of those
// temporaries' lifetimes.
-func isaddrokay(n *Node) int {
- return bool2int(islvalue(n) != 0 && (n.Op != ONAME || n.Class == PEXTERN || istemp(n) != 0))
+func isaddrokay(n *Node) bool {
+ return islvalue(n) && (n.Op != ONAME || n.Class == PEXTERN || istemp(n))
}
// Orderaddrtemp ensures that *np is okay to pass by address to runtime routines.
@@ -214,7 +213,7 @@
var n *Node
n = *np
- if isaddrokay(n) != 0 {
+ if isaddrokay(n) {
return
}
*np = ordercopyexpr(n, n.Type, order, 0)
@@ -232,7 +231,7 @@
for {
l = order.temp
- if !(l != mark) {
+ if l == mark {
break
}
order.temp = l.Next
@@ -330,19 +329,19 @@
// Ismulticall reports whether the list l is f() for a multi-value function.
// Such an f() could appear as the lone argument to a multi-arg function.
-func ismulticall(l *NodeList) int {
+func ismulticall(l *NodeList) bool {
var n *Node
// one arg only
if l == nil || l.Next != nil {
- return 0
+ return false
}
n = l.N
// must be call
switch n.Op {
default:
- return 0
+ return false
case OCALLFUNC,
OCALLMETH,
@@ -351,7 +350,7 @@
}
// call must return multiple values
- return bool2int(n.Left.Type.Outtuple > 1)
+ return n.Left.Type.Outtuple > 1
}
// Copyret emits t1, t2, ... = n, where n is a function call,
@@ -364,7 +363,7 @@
var l2 *NodeList
var tl Iter
- if n.Type.Etype != TSTRUCT || !(n.Type.Funarg != 0) {
+ if n.Type.Etype != TSTRUCT || n.Type.Funarg == 0 {
Fatal("copyret %v %d", Tconv(n.Type, 0), n.Left.Type.Outtuple)
}
@@ -387,7 +386,7 @@
// Ordercallargs orders the list of call arguments *l.
func ordercallargs(l **NodeList, order *Order) {
- if ismulticall(*l) != 0 {
+ if ismulticall(*l) {
// return f() where f() is multiple values.
*l = copyret((*l).N, order)
} else {
@@ -435,15 +434,14 @@
switch n.Op {
default:
Fatal("ordermapassign %v", Oconv(int(n.Op), 0))
- fallthrough
case OAS:
order.out = list(order.out, n)
// We call writebarrierfat only for values > 4 pointers long. See walk.c.
- if (n.Left.Op == OINDEXMAP || (needwritebarrier(n.Left, n.Right) != 0 && n.Left.Type.Width > int64(4*Widthptr))) && !(isaddrokay(n.Right) != 0) {
+ if (n.Left.Op == OINDEXMAP || (needwritebarrier(n.Left, n.Right) && n.Left.Type.Width > int64(4*Widthptr))) && !isaddrokay(n.Right) {
m = n.Left
- n.Left = ordertemp(m.Type, order, 0)
+ n.Left = ordertemp(m.Type, order, false)
a = Nod(OAS, m, n.Left)
typecheck(&a, Etop)
order.out = list(order.out, a)
@@ -457,13 +455,13 @@
for l = n.List; l != nil; l = l.Next {
if l.N.Op == OINDEXMAP {
m = l.N
- if !(istemp(m.Left) != 0) {
+ if !istemp(m.Left) {
m.Left = ordercopyexpr(m.Left, m.Left.Type, order, 0)
}
- if !(istemp(m.Right) != 0) {
+ if !istemp(m.Right) {
m.Right = ordercopyexpr(m.Right, m.Right.Type, order, 0)
}
- l.N = ordertemp(m.Type, order, 0)
+ l.N = ordertemp(m.Type, order, false)
a = Nod(OAS, m, l.N)
typecheck(&a, Etop)
post = list(post, a)
@@ -501,7 +499,6 @@
switch n.Op {
default:
Fatal("orderstmt %v", Oconv(int(n.Op), 0))
- fallthrough
case OVARKILL:
order.out = list(order.out, n)
@@ -593,7 +590,7 @@
order.out = list(order.out, n)
} else {
typ = n.Rlist.N.Type
- tmp1 = ordertemp(typ, order, bool2int(haspointers(typ)))
+ tmp1 = ordertemp(typ, order, haspointers(typ))
order.out = list(order.out, n)
r = Nod(OAS, n.List.N, tmp1)
typecheck(&r, Etop)
@@ -611,11 +608,11 @@
orderexprlist(n.List, order)
orderexpr(&n.Rlist.N.Left, order) // arg to recv
ch = n.Rlist.N.Left.Type
- tmp1 = ordertemp(ch.Type, order, bool2int(haspointers(ch.Type)))
+ tmp1 = ordertemp(ch.Type, order, haspointers(ch.Type))
if !isblank(n.List.Next.N) {
- tmp2 = ordertemp(n.List.Next.N.Type, order, 0)
+ tmp2 = ordertemp(n.List.Next.N.Type, order, false)
} else {
- tmp2 = ordertemp(Types[TBOOL], order, 0)
+ tmp2 = ordertemp(Types[TBOOL], order, false)
}
order.out = list(order.out, n)
r = Nod(OAS, n.List.N, tmp1)
@@ -724,7 +721,7 @@
t = marktemp(order)
orderexpr(&n.Left, order)
- if !(Isinter(n.Left.Type) != 0) {
+ if !Isinter(n.Left.Type) {
orderaddrtemp(&n.Left, order)
}
order.out = list(order.out, n)
@@ -745,7 +742,6 @@
switch n.Type.Etype {
default:
Fatal("orderstmt range %v", Tconv(n.Type, 0))
- fallthrough
// Mark []byte(str) range expression to reuse string backing storage.
// It is safe because the storage cannot be mutated.
@@ -784,7 +780,7 @@
n.Right = ordercopyexpr(r, r.Type, order, 0)
// n->alloc is the temp for the iterator.
- n.Alloc = ordertemp(Types[TUINT8], order, 1)
+ n.Alloc = ordertemp(Types[TUINT8], order, true)
}
for l = n.List; l != nil; l = l.Next {
@@ -884,7 +880,7 @@
l.N.Ninit = list(l.N.Ninit, tmp2)
}
- r.Left = ordertemp(r.Right.Left.Type.Type, order, bool2int(haspointers(r.Right.Left.Type.Type)))
+ r.Left = ordertemp(r.Right.Left.Type.Type, order, haspointers(r.Right.Left.Type.Type))
tmp2 = Nod(OAS, tmp1, r.Left)
typecheck(&tmp2, Etop)
l.N.Ninit = list(l.N.Ninit, tmp2)
@@ -901,7 +897,7 @@
l.N.Ninit = list(l.N.Ninit, tmp2)
}
- r.Ntest = ordertemp(tmp1.Type, order, 0)
+ r.Ntest = ordertemp(tmp1.Type, order, false)
tmp2 = Nod(OAS, tmp1, r.Ntest)
typecheck(&tmp2, Etop)
l.N.Ninit = list(l.N.Ninit, tmp2)
@@ -919,11 +915,11 @@
// r->left is c, r->right is x, both are always evaluated.
orderexpr(&r.Left, order)
- if !(istemp(r.Left) != 0) {
+ if !istemp(r.Left) {
r.Left = ordercopyexpr(r.Left, r.Left.Type, order, 0)
}
orderexpr(&r.Right, order)
- if !(istemp(r.Right) != 0) {
+ if !istemp(r.Right) {
r.Right = ordercopyexpr(r.Right, r.Right.Type, order, 0)
}
}
@@ -1003,8 +999,8 @@
var l *NodeList
var t *Type
var lno int
- var haslit int
- var hasbyte int
+ var haslit bool
+ var hasbyte bool
n = *np
if n == nil {
@@ -1031,7 +1027,7 @@
t = typ(TARRAY)
t.Bound = int64(count(n.List))
t.Type = Types[TSTRING]
- n.Alloc = ordertemp(t, order, 0)
+ n.Alloc = ordertemp(t, order, false)
}
// Mark string(byteSlice) arguments to reuse byteSlice backing
@@ -1041,15 +1037,15 @@
// Otherwise if all other arguments are empty strings,
// concatstrings will return the reference to the temp string
// to the caller.
- hasbyte = 0
+ hasbyte = false
- haslit = 0
+ haslit = false
for l = n.List; l != nil; l = l.Next {
- hasbyte |= bool2int(l.N.Op == OARRAYBYTESTR)
- haslit |= bool2int(l.N.Op == OLITERAL && len(l.N.Val.U.Sval.S) != 0)
+ hasbyte = hasbyte || l.N.Op == OARRAYBYTESTR
+ haslit = haslit || l.N.Op == OLITERAL && len(l.N.Val.U.Sval.S) != 0
}
- if haslit != 0 && hasbyte != 0 {
+ if haslit && hasbyte {
for l = n.List; l != nil; l = l.Next {
if l.N.Op == OARRAYBYTESTR {
l.N.Op = OARRAYBYTESTRTMP
@@ -1103,7 +1099,7 @@
case OCONVIFACE:
orderexpr(&n.Left, order)
- if !(Isinter(n.Left.Type) != 0) {
+ if !Isinter(n.Left.Type) {
orderaddrtemp(&n.Left, order)
}
@@ -1141,7 +1137,7 @@
case OCLOSURE:
if n.Noescape && n.Cvars != nil {
- n.Alloc = ordertemp(Types[TUINT8], order, 0) // walk will fill in correct type
+ n.Alloc = ordertemp(Types[TUINT8], order, false) // walk will fill in correct type
}
case OARRAYLIT,
@@ -1151,7 +1147,7 @@
orderexprlist(n.List, order)
orderexprlist(n.Rlist, order)
if n.Noescape {
- n.Alloc = ordertemp(Types[TUINT8], order, 0) // walk will fill in correct type
+ n.Alloc = ordertemp(Types[TUINT8], order, false) // walk will fill in correct type
}
case ODDDARG:
@@ -1160,7 +1156,7 @@
// Allocate a temporary that will be cleaned up when this statement
// completes. We could be more aggressive and try to arrange for it
// to be cleaned up when the call completes.
- n.Alloc = ordertemp(n.Type.Type, order, 0)
+ n.Alloc = ordertemp(n.Type.Type, order, false)
}
case ORECV,
@@ -1173,7 +1169,7 @@
orderexpr(&n.Left, order)
orderexpr(&n.Right, order)
t = n.Left.Type
- if t.Etype == TSTRUCT || Isfixedarray(t) != 0 {
+ if t.Etype == TSTRUCT || Isfixedarray(t) {
// for complex comparisons, we need both args to be
// addressable so we can pass them to the runtime.
orderaddrtemp(&n.Left, order)
diff --git a/src/cmd/internal/gc/pgen.go b/src/cmd/internal/gc/pgen.go
index 052d7dc..5d93ee6 100644
--- a/src/cmd/internal/gc/pgen.go
+++ b/src/cmd/internal/gc/pgen.go
@@ -272,7 +272,7 @@
ll = Curfn.Dcl
n = ll.N
- if n.Class == PAUTO && n.Op == ONAME && !(n.Used != 0) {
+ if n.Class == PAUTO && n.Op == ONAME && n.Used == 0 {
// No locals used at all
Curfn.Dcl = nil
@@ -282,7 +282,7 @@
for ll = Curfn.Dcl; ll.Next != nil; ll = ll.Next {
n = ll.Next.N
- if n.Class == PAUTO && n.Op == ONAME && !(n.Used != 0) {
+ if n.Class == PAUTO && n.Op == ONAME && n.Used == 0 {
ll.Next = nil
Curfn.Dcl.End = ll
break
@@ -360,12 +360,12 @@
}
// Ideally we wouldn't see any integer types here, but we do.
- if n.Type == nil || (!(Isptr[n.Type.Etype] != 0) && !(Isint[n.Type.Etype] != 0) && n.Type.Etype != TUNSAFEPTR) {
+ if n.Type == nil || (Isptr[n.Type.Etype] == 0 && Isint[n.Type.Etype] == 0 && n.Type.Etype != TUNSAFEPTR) {
Dump("checknil", n)
Fatal("bad checknil")
}
- if ((Thearch.Thechar == '5' || Thearch.Thechar == '9') && n.Op != OREGISTER) || !(n.Addable != 0) || n.Op == OLITERAL {
+ if ((Thearch.Thechar == '5' || Thearch.Thechar == '9') && n.Op != OREGISTER) || n.Addable == 0 || n.Op == OLITERAL {
Thearch.Regalloc(®, Types[Tptr], n)
Thearch.Cgen(n, ®)
Thearch.Gins(obj.ACHECKNIL, ®, nil)
@@ -478,7 +478,7 @@
if fn.Wrapper != 0 {
ptxt.From3.Offset |= obj.WRAPPER
}
- if fn.Needctxt != 0 {
+ if fn.Needctxt {
ptxt.From3.Offset |= obj.NEEDCTXT
}
if fn.Nosplit {
@@ -557,7 +557,7 @@
Pc.Lineno = lineno
fixjmp(ptxt)
- if !(Debug['N'] != 0) || Debug['R'] != 0 || Debug['P'] != 0 {
+ if Debug['N'] == 0 || Debug['R'] != 0 || Debug['P'] != 0 {
regopt(ptxt)
nilopt(ptxt)
}
diff --git a/src/cmd/internal/gc/plive.go b/src/cmd/internal/gc/plive.go
index 04173fc..73f6086 100644
--- a/src/cmd/internal/gc/plive.go
+++ b/src/cmd/internal/gc/plive.go
@@ -183,18 +183,13 @@
// are two criteria for termination. If the end of basic block is reached a
// value of zero is returned. If the callback returns a non-zero value, the
// iteration is stopped and the value of the callback is returned.
-func blockany(bb *BasicBlock, callback func(*obj.Prog) int) int {
- var p *obj.Prog
- var result int
-
- for p = bb.last; p != nil; p = p.Opt.(*obj.Prog) {
- result = callback(p)
- if result != 0 {
- return result
+func blockany(bb *BasicBlock, f func(*obj.Prog) bool) bool {
+ for p := bb.last; p != nil; p = p.Opt.(*obj.Prog) {
+ if f(p) {
+ return true
}
}
-
- return 0
+ return false
}
// Collects and returns and array of Node*s for functions arguments and local
@@ -303,7 +298,7 @@
var isselectcommcasecall_names [5]*obj.LSym
-func isselectcommcasecall(prog *obj.Prog) int {
+func isselectcommcasecall(prog *obj.Prog) bool {
var i int32
if isselectcommcasecall_names[0] == nil {
@@ -315,41 +310,41 @@
for i = 0; isselectcommcasecall_names[i] != nil; i++ {
if iscall(prog, isselectcommcasecall_names[i]) {
- return 1
+ return true
}
}
- return 0
+ return false
}
// Returns true for call instructions that target runtime·newselect.
var isnewselect_sym *obj.LSym
-func isnewselect(prog *obj.Prog) int {
+func isnewselect(prog *obj.Prog) bool {
if isnewselect_sym == nil {
isnewselect_sym = Linksym(Pkglookup("newselect", Runtimepkg))
}
- return bool2int(iscall(prog, isnewselect_sym))
+ return iscall(prog, isnewselect_sym)
}
// Returns true for call instructions that target runtime·selectgo.
var isselectgocall_sym *obj.LSym
-func isselectgocall(prog *obj.Prog) int {
+func isselectgocall(prog *obj.Prog) bool {
if isselectgocall_sym == nil {
isselectgocall_sym = Linksym(Pkglookup("selectgo", Runtimepkg))
}
- return bool2int(iscall(prog, isselectgocall_sym))
+ return iscall(prog, isselectgocall_sym)
}
var isdeferreturn_sym *obj.LSym
-func isdeferreturn(prog *obj.Prog) int {
+func isdeferreturn(prog *obj.Prog) bool {
if isdeferreturn_sym == nil {
isdeferreturn_sym = Linksym(Pkglookup("deferreturn", Runtimepkg))
}
- return bool2int(iscall(prog, isdeferreturn_sym))
+ return iscall(prog, isdeferreturn_sym)
}
// Walk backwards from a runtime·selectgo call up to its immediately dominating
@@ -366,7 +361,7 @@
Fatal("selectgo does not have a newselect")
}
pred = pred.pred[0]
- if blockany(pred, isselectcommcasecall) != 0 {
+ if blockany(pred, isselectcommcasecall) {
// A select comm case block should have exactly one
// successor.
if len(pred.succ) != 1 {
@@ -386,7 +381,7 @@
addedge(selectgo, succ)
}
- if blockany(pred, isnewselect) != 0 {
+ if blockany(pred, isnewselect) {
// Reached the matching newselect.
break
}
@@ -451,7 +446,7 @@
p.Link.Opt = newblock(p.Link)
cfg = append(cfg, p.Link.Opt.(*BasicBlock))
}
- } else if isselectcommcasecall(p) != 0 || isselectgocall(p) != 0 {
+ } else if isselectcommcasecall(p) || isselectgocall(p) {
// Accommodate implicit selectgo control flow.
if p.Link.Opt == nil {
p.Link.Opt = newblock(p.Link)
@@ -478,7 +473,7 @@
}
// Collect basic blocks with selectgo calls.
- if isselectgocall(p) != 0 {
+ if isselectgocall(p) {
selectgo = append(selectgo, bb)
}
}
@@ -627,7 +622,7 @@
// non-tail-call return instructions; see note above
// the for loop for details.
case PPARAMOUT:
- if !(node.Addrtaken != 0) && prog.To.Type == obj.TYPE_NONE {
+ if node.Addrtaken == 0 && prog.To.Type == obj.TYPE_NONE {
bvset(uevar, i)
}
}
@@ -674,7 +669,7 @@
bvset(uevar, pos)
}
if info.Flags&LeftWrite != 0 {
- if from.Node != nil && !(Isfat(((from.Node).(*Node)).Type) != 0) {
+ if from.Node != nil && !Isfat(((from.Node).(*Node)).Type) {
bvset(varkill, pos)
}
}
@@ -718,7 +713,7 @@
bvset(uevar, pos)
}
if info.Flags&RightWrite != 0 {
- if to.Node != nil && (!(Isfat(((to.Node).(*Node)).Type) != 0) || prog.As == obj.AVARDEF) {
+ if to.Node != nil && (!Isfat(((to.Node).(*Node)).Type) || prog.As == obj.AVARDEF) {
bvset(varkill, pos)
}
}
@@ -1050,7 +1045,7 @@
if t.Bound < -1 {
Fatal("twobitwalktype1: invalid bound, %v", Tconv(t, 0))
}
- if Isslice(t) != 0 {
+ if Isslice(t) {
// struct { byte *array; uintgo len; uintgo cap; }
if *xoffset&int64(Widthptr-1) != 0 {
Fatal("twobitwalktype1: invalid TARRAY alignment, %v", Tconv(t, 0))
@@ -1101,7 +1096,7 @@
for i = 0; ; i++ {
i = int32(bvnext(liveout, i))
- if !(i >= 0) {
+ if i < 0 {
break
}
node = vars[i]
@@ -1163,8 +1158,8 @@
// Returns true for instructions that are safe points that must be annotated
// with liveness information.
-func issafepoint(prog *obj.Prog) int {
- return bool2int(prog.As == obj.ATEXT || prog.As == obj.ACALL)
+func issafepoint(prog *obj.Prog) bool {
+ return prog.As == obj.ATEXT || prog.As == obj.ACALL
}
// Initializes the sets for solving the live variables. Visits all the
@@ -1332,7 +1327,7 @@
// This function is slow but it is only used for generating debug prints.
// Check whether n is marked live in args/locals.
-func islive(n *Node, args *Bvec, locals *Bvec) int {
+func islive(n *Node, args *Bvec, locals *Bvec) bool {
var i int
switch n.Class {
@@ -1340,19 +1335,19 @@
PPARAMOUT:
for i = 0; int64(i) < n.Type.Width/int64(Widthptr)*obj.BitsPerPointer; i++ {
if bvget(args, int32(n.Xoffset/int64(Widthptr)*obj.BitsPerPointer+int64(i))) != 0 {
- return 1
+ return true
}
}
case PAUTO:
for i = 0; int64(i) < n.Type.Width/int64(Widthptr)*obj.BitsPerPointer; i++ {
if bvget(locals, int32((n.Xoffset+stkptrsize)/int64(Widthptr)*obj.BitsPerPointer+int64(i))) != 0 {
- return 1
+ return true
}
}
}
- return 0
+ return false
}
// Visits all instructions in a basic block and computes a bit vector of live
@@ -1427,21 +1422,21 @@
bvor(any, any, avarinit)
bvor(all, all, avarinit)
- if issafepoint(p) != 0 {
+ if issafepoint(p) {
// Annotate ambiguously live variables so that they can
// be zeroed at function entry.
// livein and liveout are dead here and used as temporaries.
bvresetall(livein)
bvandnot(liveout, any, all)
- if !(bvisempty(liveout) != 0) {
+ if !bvisempty(liveout) {
for pos = 0; pos < liveout.n; pos++ {
- if !(bvget(liveout, pos) != 0) {
+ if bvget(liveout, pos) == 0 {
continue
}
bvset(all, pos) // silence future warnings in this block
n = lv.vars[pos]
- if !(n.Needzero != 0) {
+ if n.Needzero == 0 {
n.Needzero = 1
if debuglive >= 1 {
Warnl(int(p.Lineno), "%v: %v is ambiguously live", Nconv(Curfn.Nname, 0), Nconv(n, obj.FmtLong))
@@ -1517,7 +1512,7 @@
bvcopy(liveout, livein)
bvandnot(livein, liveout, varkill)
bvor(livein, livein, uevar)
- if debuglive >= 3 && issafepoint(p) != 0 {
+ if debuglive >= 3 && issafepoint(p) {
fmt.Printf("%v\n", p)
printvars("uevar", uevar, lv.vars)
printvars("varkill", varkill, lv.vars)
@@ -1525,7 +1520,7 @@
printvars("liveout", liveout, lv.vars)
}
- if issafepoint(p) != 0 {
+ if issafepoint(p) {
// Found an interesting instruction, record the
// corresponding liveness information.
@@ -1534,7 +1529,7 @@
// input parameters.
if p.As == obj.ATEXT {
for j = 0; j < liveout.n; j++ {
- if !(bvget(liveout, j) != 0) {
+ if bvget(liveout, j) == 0 {
continue
}
n = lv.vars[j]
@@ -1574,7 +1569,7 @@
numlive = 0
for j = 0; j < int32(len(lv.vars)); j++ {
n = lv.vars[j]
- if islive(n, args, locals) != 0 {
+ if islive(n, args, locals) {
fmt_ += fmt.Sprintf(" %v", Nconv(n, 0))
numlive++
}
@@ -1592,7 +1587,7 @@
// Only CALL instructions need a PCDATA annotation.
// The TEXT instruction annotation is implicit.
if p.As == obj.ACALL {
- if isdeferreturn(p) != 0 {
+ if isdeferreturn(p) {
// runtime.deferreturn modifies its return address to return
// back to the CALL, not to the subsequent instruction.
// Because the return comes back one instruction early,
@@ -1760,11 +1755,11 @@
started = 0
for i = 0; i < len(vars); i++ {
- if !(bvget(bits, int32(i)) != 0) {
+ if bvget(bits, int32(i)) == 0 {
continue
}
- if !(started != 0) {
- if !(printed != 0) {
+ if started == 0 {
+ if printed == 0 {
fmt.Printf("\t")
} else {
fmt.Printf(" ")
@@ -1856,14 +1851,14 @@
if printed != 0 {
fmt.Printf("\n")
}
- if issafepoint(p) != 0 {
+ if issafepoint(p) {
args = lv.argslivepointers[pcdata]
locals = lv.livepointers[pcdata]
fmt.Printf("\tlive=")
printed = 0
for j = 0; j < len(lv.vars); j++ {
n = lv.vars[j]
- if islive(n, args, locals) != 0 {
+ if islive(n, args, locals) {
tmp9 := printed
printed++
if tmp9 != 0 {
diff --git a/src/cmd/internal/gc/popt.go b/src/cmd/internal/gc/popt.go
index 6d69120..8a3601b 100644
--- a/src/cmd/internal/gc/popt.go
+++ b/src/cmd/internal/gc/popt.go
@@ -179,7 +179,7 @@
var noreturn_symlist [10]*Sym
-func Noreturn(p *obj.Prog) int {
+func Noreturn(p *obj.Prog) bool {
var s *Sym
var i int
@@ -195,18 +195,18 @@
}
if p.To.Node == nil {
- return 0
+ return false
}
s = ((p.To.Node).(*Node)).Sym
if s == nil {
- return 0
+ return false
}
for i = 0; noreturn_symlist[i] != nil; i++ {
if s == noreturn_symlist[i] {
- return 1
+ return true
}
}
- return 0
+ return false
}
// JMP chasing and removal.
@@ -325,7 +325,7 @@
// pass 4: elide JMP to next instruction.
// only safe if there are no jumps to JMPs anymore.
- if !(jmploop != 0) {
+ if jmploop == 0 {
last = nil
for p = firstp; p != nil; p = p.Link {
if p.As == obj.AJMP && p.To.Type == obj.TYPE_BRANCH && p.To.U.Branch == p.Link {
@@ -434,7 +434,7 @@
for f = start; f != nil; f = f.Link {
p = f.Prog
Thearch.Proginfo(&info, p)
- if !(info.Flags&Break != 0) {
+ if info.Flags&Break == 0 {
f1 = f.Link
f.S1 = f1
f1.P1 = f
@@ -492,11 +492,11 @@
r.Rpo = 1
r1 = r.S1
- if r1 != nil && !(r1.Rpo != 0) {
+ if r1 != nil && r1.Rpo == 0 {
n = postorder(r1, rpo2r, n)
}
r1 = r.S2
- if r1 != nil && !(r1.Rpo != 0) {
+ if r1 != nil && r1.Rpo == 0 {
n = postorder(r1, rpo2r, n)
}
rpo2r[n] = r
@@ -529,26 +529,26 @@
return rpo1
}
-func doms(idom []int32, r int32, s int32) int {
+func doms(idom []int32, r int32, s int32) bool {
for s > r {
s = idom[s]
}
- return bool2int(s == r)
+ return s == r
}
-func loophead(idom []int32, r *Flow) int {
+func loophead(idom []int32, r *Flow) bool {
var src int32
src = r.Rpo
- if r.P1 != nil && doms(idom, src, r.P1.Rpo) != 0 {
- return 1
+ if r.P1 != nil && doms(idom, src, r.P1.Rpo) {
+ return true
}
for r = r.P2; r != nil; r = r.P2link {
- if doms(idom, src, r.Rpo) != 0 {
- return 1
+ if doms(idom, src, r.Rpo) {
+ return true
}
}
- return 0
+ return false
}
func loopmark(rpo2r **Flow, head int32, r *Flow) {
@@ -620,7 +620,7 @@
for i = 0; i < nr; i++ {
r1 = rpo2r[i]
r1.Loop++
- if r1.P2 != nil && loophead(idom, r1) != 0 {
+ if r1.P2 != nil && loophead(idom, r1) {
loopmark(&rpo2r[0], i, r1)
}
}
@@ -718,8 +718,8 @@
}
// Is n available for merging?
-func canmerge(n *Node) int {
- return bool2int(n.Class == PAUTO && strings.HasPrefix(n.Sym.Name, "autotmp"))
+func canmerge(n *Node) bool {
+ return n.Class == PAUTO && strings.HasPrefix(n.Sym.Name, "autotmp")
}
func mergetemp(firstp *obj.Prog) {
@@ -757,7 +757,7 @@
// Build list of all mergeable variables.
nvar = 0
for l = Curfn.Dcl; l != nil; l = l.Next {
- if canmerge(l.N) != 0 {
+ if canmerge(l.N) {
nvar++
}
}
@@ -766,7 +766,7 @@
nvar = 0
for l = Curfn.Dcl; l != nil; l = l.Next {
n = l.N
- if canmerge(n) != 0 {
+ if canmerge(n) {
v = &var_[nvar]
nvar++
n.Opt = v
@@ -826,9 +826,9 @@
if f != nil && f.Data.(*Flow) == nil {
p = f.Prog
Thearch.Proginfo(&info, p)
- if p.To.Node == v.node && (info.Flags&RightWrite != 0) && !(info.Flags&RightRead != 0) {
+ if p.To.Node == v.node && (info.Flags&RightWrite != 0) && info.Flags&RightRead == 0 {
p.As = obj.ANOP
- p.To = obj.Zprog.To
+ p.To = obj.Addr{}
v.removed = 1
if debugmerge > 0 && Debug['v'] != 0 {
fmt.Printf("drop write-only %v\n", Sconv(v.node.Sym, 0))
@@ -851,7 +851,7 @@
const (
SizeAny = SizeB | SizeW | SizeL | SizeQ | SizeF | SizeD
)
- if p.From.Node == v.node && p1.To.Node == v.node && (info.Flags&Move != 0) && !((info.Flags|info1.Flags)&(LeftAddr|RightAddr) != 0) && info.Flags&SizeAny == info1.Flags&SizeAny {
+ if p.From.Node == v.node && p1.To.Node == v.node && (info.Flags&Move != 0) && (info.Flags|info1.Flags)&(LeftAddr|RightAddr) == 0 && info.Flags&SizeAny == info1.Flags&SizeAny {
p1.From = p.From
Thearch.Excise(f)
v.removed = 1
@@ -1010,7 +1010,7 @@
// Delete merged nodes from declaration list.
for lp = &Curfn.Dcl; ; {
l = *lp
- if !(l != nil) {
+ if l == nil {
break
}
@@ -1126,11 +1126,11 @@
nkill = 0
for f = g.Start; f != nil; f = f.Link {
p = f.Prog
- if p.As != obj.ACHECKNIL || !(Thearch.Regtyp(&p.From) != 0) {
+ if p.As != obj.ACHECKNIL || !Thearch.Regtyp(&p.From) {
continue
}
ncheck++
- if Thearch.Stackaddr(&p.From) != 0 {
+ if Thearch.Stackaddr(&p.From) {
if Debug_checknil != 0 && p.Lineno > 1 {
Warnl(int(p.Lineno), "removed nil check of SP address")
}
@@ -1177,13 +1177,13 @@
for f = fcheck; f != nil; f = Uniqp(f) {
p = f.Prog
Thearch.Proginfo(&info, p)
- if (info.Flags&RightWrite != 0) && Thearch.Sameaddr(&p.To, &fcheck.Prog.From) != 0 {
+ if (info.Flags&RightWrite != 0) && Thearch.Sameaddr(&p.To, &fcheck.Prog.From) {
// Found initialization of value we're checking for nil.
// without first finding the check, so this one is unchecked.
return
}
- if f != fcheck && p.As == obj.ACHECKNIL && Thearch.Sameaddr(&p.From, &fcheck.Prog.From) != 0 {
+ if f != fcheck && p.As == obj.ACHECKNIL && Thearch.Sameaddr(&p.From, &fcheck.Prog.From) {
fcheck.Data = &killed
return
}
@@ -1249,12 +1249,12 @@
p = f.Prog
Thearch.Proginfo(&info, p)
- if (info.Flags&LeftRead != 0) && Thearch.Smallindir(&p.From, &fcheck.Prog.From) != 0 {
+ if (info.Flags&LeftRead != 0) && Thearch.Smallindir(&p.From, &fcheck.Prog.From) {
fcheck.Data = &killed
return
}
- if (info.Flags&(RightRead|RightWrite) != 0) && Thearch.Smallindir(&p.To, &fcheck.Prog.From) != 0 {
+ if (info.Flags&(RightRead|RightWrite) != 0) && Thearch.Smallindir(&p.To, &fcheck.Prog.From) {
fcheck.Data = &killed
return
}
@@ -1265,12 +1265,12 @@
}
// Stop if value is lost.
- if (info.Flags&RightWrite != 0) && Thearch.Sameaddr(&p.To, &fcheck.Prog.From) != 0 {
+ if (info.Flags&RightWrite != 0) && Thearch.Sameaddr(&p.To, &fcheck.Prog.From) {
return
}
// Stop if memory write.
- if (info.Flags&RightWrite != 0) && !(Thearch.Regtyp(&p.To) != 0) {
+ if (info.Flags&RightWrite != 0) && !Thearch.Regtyp(&p.To) {
return
}
diff --git a/src/cmd/internal/gc/racewalk.go b/src/cmd/internal/gc/racewalk.go
index fe7a82c..582f6b4 100644
--- a/src/cmd/internal/gc/racewalk.go
+++ b/src/cmd/internal/gc/racewalk.go
@@ -30,27 +30,27 @@
// Memory accesses in the packages are either uninteresting or will cause false positives.
var noinst_pkgs = []string{"sync", "sync/atomic"}
-func ispkgin(pkgs []string) int {
+func ispkgin(pkgs []string) bool {
var i int
if myimportpath != "" {
for i = 0; i < len(pkgs); i++ {
if myimportpath == pkgs[i] {
- return 1
+ return true
}
}
}
- return 0
+ return false
}
-func isforkfunc(fn *Node) int {
+func isforkfunc(fn *Node) bool {
// Special case for syscall.forkAndExecInChild.
// In the child, this function must not acquire any locks, because
// they might have been locked at the time of the fork. This means
// no rescheduling, no malloc calls, and no new stack segments.
// Race instrumentation does all of the above.
- return bool2int(myimportpath != "" && myimportpath == "syscall" && fn.Nname.Sym.Name == "forkAndExecInChild")
+ return myimportpath != "" && myimportpath == "syscall" && fn.Nname.Sym.Name == "forkAndExecInChild"
}
func racewalk(fn *Node) {
@@ -58,11 +58,11 @@
var nodpc *Node
var s string
- if ispkgin(omit_pkgs) != 0 || isforkfunc(fn) != 0 {
+ if ispkgin(omit_pkgs) || isforkfunc(fn) {
return
}
- if !(ispkgin(noinst_pkgs) != 0) {
+ if !ispkgin(noinst_pkgs) {
racewalklist(fn.Nbody, nil)
// nothing interesting for race detector in fn->enter
@@ -147,7 +147,6 @@
switch n.Op {
default:
Fatal("racewalk: unknown node type %v", Oconv(int(n.Op), 0))
- fallthrough
case OAS,
OAS2FUNC:
@@ -263,7 +262,7 @@
OLEN,
OCAP:
racewalknode(&n.Left, init, 0, 0)
- if Istype(n.Left.Type, TMAP) != 0 {
+ if Istype(n.Left.Type, TMAP) {
n1 = Nod(OCONVNOP, n.Left, nil)
n1.Type = Ptrto(Types[TUINT8])
n1 = Nod(OIND, n1, nil)
@@ -326,9 +325,9 @@
goto ret
case OINDEX:
- if !(Isfixedarray(n.Left.Type) != 0) {
+ if !Isfixedarray(n.Left.Type) {
racewalknode(&n.Left, init, 0, 0)
- } else if !(islvalue(n.Left) != 0) {
+ } else if !islvalue(n.Left) {
// index of unaddressable array, like Map[k][i].
racewalknode(&n.Left, init, wr, 0)
@@ -468,34 +467,34 @@
*np = n
}
-func isartificial(n *Node) int {
+func isartificial(n *Node) bool {
// compiler-emitted artificial things that we do not want to instrument,
// cant' possibly participate in a data race.
if n.Op == ONAME && n.Sym != nil && n.Sym.Name != "" {
if n.Sym.Name == "_" {
- return 1
+ return true
}
// autotmp's are always local
if strings.HasPrefix(n.Sym.Name, "autotmp_") {
- return 1
+ return true
}
// statictmp's are read-only
if strings.HasPrefix(n.Sym.Name, "statictmp_") {
- return 1
+ return true
}
// go.itab is accessed only by the compiler and runtime (assume safe)
if n.Sym.Pkg != nil && n.Sym.Pkg.Name != "" && n.Sym.Pkg.Name == "go.itab" {
- return 1
+ return true
}
}
- return 0
+ return false
}
-func callinstr(np **Node, init **NodeList, wr int, skip int) int {
+func callinstr(np **Node, init **NodeList, wr int, skip int) bool {
var name string
var f *Node
var b *Node
@@ -510,18 +509,18 @@
// n, n->op, n->type ? n->type->etype : -1, n->class);
if skip != 0 || n.Type == nil || n.Type.Etype >= TIDEAL {
- return 0
+ return false
}
t = n.Type
- if isartificial(n) != 0 {
- return 0
+ if isartificial(n) {
+ return false
}
b = outervalue(n)
// it skips e.g. stores to ... parameter array
- if isartificial(b) != 0 {
- return 0
+ if isartificial(b) {
+ return false
}
class = int(b.Class)
@@ -539,7 +538,7 @@
n = treecopy(n)
makeaddable(n)
- if t.Etype == TSTRUCT || Isfixedarray(t) != 0 {
+ if t.Etype == TSTRUCT || Isfixedarray(t) {
name = "racereadrange"
if wr != 0 {
name = "racewriterange"
@@ -554,10 +553,10 @@
}
*init = list(*init, f)
- return 1
+ return true
}
- return 0
+ return false
}
// makeaddable returns a node whose memory location is the
@@ -572,7 +571,7 @@
// an addressable value.
switch n.Op {
case OINDEX:
- if Isfixedarray(n.Left.Type) != 0 {
+ if Isfixedarray(n.Left.Type) {
makeaddable(n.Left)
}
@@ -596,7 +595,7 @@
var r *Node
r = Nod(OADDR, n, nil)
- r.Bounded = 1
+ r.Bounded = true
r = conv(r, Types[TUNSAFEPTR])
r = conv(r, Types[TUINTPTR])
return r
diff --git a/src/cmd/internal/gc/range.go b/src/cmd/internal/gc/range.go
index 1e33da3..bb30bcf 100644
--- a/src/cmd/internal/gc/range.go
+++ b/src/cmd/internal/gc/range.go
@@ -43,7 +43,7 @@
}
}
- if Isptr[t.Etype] != 0 && Isfixedarray(t.Type) != 0 {
+ if Isptr[t.Etype] != 0 && Isfixedarray(t.Type) {
t = t.Type
}
n.Type = t
@@ -63,7 +63,7 @@
t2 = t.Type
case TCHAN:
- if !(t.Chan&Crecv != 0) {
+ if t.Chan&Crecv == 0 {
Yyerror("invalid operation: range %v (receive from send-only type %v)", Nconv(n.Right, 0), Tconv(n.Right.Type, 0))
goto out
}
@@ -184,7 +184,6 @@
switch t.Etype {
default:
Fatal("walkrange")
- fallthrough
// Lower n into runtime·memclr if possible, for
// fast zeroing of slices and arrays (issue 5373).
@@ -196,8 +195,8 @@
//
// in which the evaluation of a is side-effect-free.
case TARRAY:
- if !(Debug['N'] != 0) {
- if !(flag_race != 0) {
+ if Debug['N'] == 0 {
+ if flag_race == 0 {
if v1 != nil {
if v2 == nil {
if n.Nbody != nil {
@@ -206,10 +205,10 @@
tmp = n.Nbody.N // first statement of body
if tmp.Op == OAS {
if tmp.Left.Op == OINDEX {
- if samesafeexpr(tmp.Left.Left, a) != 0 {
- if samesafeexpr(tmp.Left.Right, v1) != 0 {
+ if samesafeexpr(tmp.Left.Left, a) {
+ if samesafeexpr(tmp.Left.Right, v1) {
if t.Type.Width > 0 {
- if iszero(tmp.Right) != 0 {
+ if iszero(tmp.Right) {
// Convert to
// if len(a) != 0 {
// hp = &a[0]
@@ -227,7 +226,7 @@
hp = temp(Ptrto(Types[TUINT8]))
tmp = Nod(OINDEX, a, Nodintconst(0))
- tmp.Bounded = 1
+ tmp.Bounded = true
tmp = Nod(OADDR, tmp, nil)
tmp = Nod(OCONVNOP, tmp, nil)
tmp.Type = Ptrto(Types[TUINT8])
@@ -282,7 +281,7 @@
if v2 != nil {
hp = temp(Ptrto(n.Type.Type))
tmp = Nod(OINDEX, ha, Nodintconst(0))
- tmp.Bounded = 1
+ tmp.Bounded = true
init = list(init, Nod(OAS, hp, Nod(OADDR, tmp, nil)))
}
@@ -369,7 +368,7 @@
}
hb = temp(Types[TBOOL])
- n.Ntest = Nod(ONE, hb, Nodbool(0))
+ n.Ntest = Nod(ONE, hb, Nodbool(false))
a = Nod(OAS2RECV, nil, nil)
a.Typecheck = 1
a.List = list(list1(hv1), hb)
diff --git a/src/cmd/internal/gc/reflect.go b/src/cmd/internal/gc/reflect.go
index 4be0f1d..ba9b75d 100644
--- a/src/cmd/internal/gc/reflect.go
+++ b/src/cmd/internal/gc/reflect.go
@@ -355,7 +355,7 @@
// type stored in interface word
it = t
- if !(isdirectiface(it) != 0) {
+ if !isdirectiface(it) {
it = Ptrto(t)
}
@@ -370,10 +370,10 @@
if f.Type.Etype != TFUNC || f.Type.Thistuple == 0 {
Fatal("non-method on %v method %v %v\n", Tconv(mt, 0), Sconv(f.Sym, 0), Tconv(f, 0))
}
- if !(getthisx(f.Type).Type != nil) {
+ if getthisx(f.Type).Type == nil {
Fatal("receiver with no type on %v method %v %v\n", Tconv(mt, 0), Sconv(f.Sym, 0), Tconv(f, 0))
}
- if f.Nointerface != 0 {
+ if f.Nointerface {
continue
}
@@ -391,7 +391,7 @@
if Isptr[this.Etype] != 0 && this.Type == t {
continue
}
- if Isptr[this.Etype] != 0 && !(Isptr[t.Etype] != 0) && f.Embedded != 2 && !(isifacemethod(f.Type) != 0) {
+ if Isptr[this.Etype] != 0 && Isptr[t.Etype] == 0 && f.Embedded != 2 && !isifacemethod(f.Type) {
continue
}
@@ -412,7 +412,7 @@
a.type_ = methodfunc(f.Type, t)
a.mtype = methodfunc(f.Type, nil)
- if !(a.isym.Flags&SymSiggen != 0) {
+ if a.isym.Flags&SymSiggen == 0 {
a.isym.Flags |= SymSiggen
if !Eqtype(this, it) || this.Width < Types[Tptr].Width {
compiling_wrappers = 1
@@ -421,7 +421,7 @@
}
}
- if !(a.tsym.Flags&SymSiggen != 0) {
+ if a.tsym.Flags&SymSiggen == 0 {
a.tsym.Flags |= SymSiggen
if !Eqtype(this, t) {
compiling_wrappers = 1
@@ -489,7 +489,7 @@
// code can refer to it.
isym = methodsym(method, t, 0)
- if !(isym.Flags&SymSiggen != 0) {
+ if isym.Flags&SymSiggen == 0 {
isym.Flags |= SymSiggen
genwrapper(t, f, isym, 0)
}
@@ -649,7 +649,7 @@
func haspointers(t *Type) bool {
var t1 *Type
- var ret int
+ var ret bool
if t.Haspointers != 0 {
return t.Haspointers-1 != 0
@@ -672,26 +672,26 @@
TCOMPLEX64,
TCOMPLEX128,
TBOOL:
- ret = 0
+ ret = false
case TARRAY:
if t.Bound < 0 { // slice
- ret = 1
+ ret = true
break
}
if t.Bound == 0 { // empty array
- ret = 0
+ ret = false
break
}
- ret = bool2int(haspointers(t.Type))
+ ret = haspointers(t.Type)
case TSTRUCT:
- ret = 0
+ ret = false
for t1 = t.Type; t1 != nil; t1 = t1.Down {
if haspointers(t1.Type) {
- ret = 1
+ ret = true
break
}
}
@@ -706,11 +706,11 @@
TFUNC:
fallthrough
default:
- ret = 1
+ ret = true
}
- t.Haspointers = uint8(1 + ret)
- return ret != 0
+ t.Haspointers = 1 + uint8(bool2int(ret))
+ return ret
}
/*
@@ -724,7 +724,7 @@
var i int
var alg int
var sizeofAlg int
- var gcprog int
+ var gcprog bool
var sptr *Sym
var algsym *Sym
var zero *Sym
@@ -751,7 +751,7 @@
algsym = dalgsym(t)
}
- if t.Sym != nil && !(Isptr[t.Etype] != 0) {
+ if t.Sym != nil && Isptr[t.Etype] == 0 {
sptr = dtypesym(Ptrto(t))
} else {
sptr = weaktypesym(Ptrto(t))
@@ -811,10 +811,10 @@
if !haspointers(t) {
i |= obj.KindNoPointers
}
- if isdirectiface(t) != 0 {
+ if isdirectiface(t) {
i |= obj.KindDirectIface
}
- if gcprog != 0 {
+ if gcprog {
i |= obj.KindGCProg
}
ot = duint8(s, ot, uint8(i)) // kind
@@ -825,7 +825,7 @@
}
// gc
- if gcprog != 0 {
+ if gcprog {
gengcprog(t, &gcprog0, &gcprog1)
if gcprog0 != nil {
ot = dsymptr(s, ot, gcprog0, 0)
@@ -937,7 +937,7 @@
var s *Sym
var n *Node
- if t == nil || (Isptr[t.Etype] != 0 && t.Type == nil) || isideal(t) != 0 {
+ if t == nil || (Isptr[t.Etype] != 0 && t.Type == nil) || isideal(t) {
Fatal("typename %v", Tconv(t, 0))
}
s = typesym(t)
@@ -987,7 +987,7 @@
* Returns 1 if t has a reflexive equality operator.
* That is, if x==x for all x of type t.
*/
-func isreflexive(t *Type) int {
+func isreflexive(t *Type) bool {
var t1 *Type
switch t.Etype {
case TBOOL,
@@ -1007,33 +1007,33 @@
TUNSAFEPTR,
TSTRING,
TCHAN:
- return 1
+ return true
case TFLOAT32,
TFLOAT64,
TCOMPLEX64,
TCOMPLEX128,
TINTER:
- return 0
+ return false
case TARRAY:
- if Isslice(t) != 0 {
+ if Isslice(t) {
Fatal("slice can't be a map key: %v", Tconv(t, 0))
}
return isreflexive(t.Type)
case TSTRUCT:
for t1 = t.Type; t1 != nil; t1 = t1.Down {
- if !(isreflexive(t1.Type) != 0) {
- return 0
+ if !isreflexive(t1.Type) {
+ return false
}
}
- return 1
+ return true
default:
Fatal("bad type for map key: %v", Tconv(t, 0))
- return 0
+ return false
}
}
@@ -1062,7 +1062,7 @@
t = Types[t.Etype]
}
- if isideal(t) != 0 {
+ if isideal(t) {
Fatal("dtypesym %v", Tconv(t, 0))
}
@@ -1090,7 +1090,7 @@
}
// named types from other files are defined only by those files
- if tbase.Sym != nil && !(tbase.Local != 0) {
+ if tbase.Sym != nil && tbase.Local == 0 {
return s
}
if isforw[tbase.Etype] != 0 {
@@ -1230,7 +1230,7 @@
}
ot = duint16(s, ot, uint16(mapbucket(t).Width))
- ot = duint8(s, ot, uint8(isreflexive(t.Down)))
+ ot = duint8(s, ot, uint8(bool2int(isreflexive(t.Down))))
case TPTR32,
TPTR64:
@@ -1265,7 +1265,7 @@
ot = duintxx(s, ot, uint64(n), Widthint)
for t1 = t.Type; t1 != nil; t1 = t1.Down {
// ../../runtime/type.go:/structField
- if t1.Sym != nil && !(t1.Embedded != 0) {
+ if t1.Sym != nil && t1.Embedded == 0 {
ot = dgostringptr(s, ot, t1.Sym.Name)
if exportname(t1.Sym.Name) {
ot = dgostringptr(s, ot, "")
@@ -1447,12 +1447,12 @@
return s
}
-func usegcprog(t *Type) int {
+func usegcprog(t *Type) bool {
var size int64
var nptr int64
if !haspointers(t) {
- return 0
+ return false
}
if t.Width == BADWIDTH {
dowidth(t)
@@ -1473,7 +1473,7 @@
// While large objects usually contain arrays; and even if it don't
// the program uses 2-bits per word while mask uses 4-bits per word,
// so the program is still smaller.
- return bool2int(size > int64(2*Widthptr))
+ return size > int64(2*Widthptr)
}
// Generates sparse GC bitmask (4 bits per word).
@@ -1483,7 +1483,7 @@
var nptr int64
var i int64
var j int64
- var half int
+ var half bool
var bits uint8
var pos []byte
@@ -1505,7 +1505,7 @@
pos = gcmask
nptr = (t.Width + int64(Widthptr) - 1) / int64(Widthptr)
- half = 0
+ half = false
// If number of words is odd, repeat the mask.
// This makes simpler handling of arrays in runtime.
@@ -1520,12 +1520,12 @@
bits = obj.BitsScalar
}
bits <<= 2
- if half != 0 {
+ if half {
bits <<= 4
}
pos[0] |= byte(bits)
- half = bool2int(!(half != 0))
- if !(half != 0) {
+ half = !half
+ if !half {
pos = pos[1:]
}
}
@@ -1699,7 +1699,7 @@
*xoffset += t.Width
case TARRAY:
- if Isslice(t) != 0 {
+ if Isslice(t) {
proggendata(g, obj.BitsPointer)
proggendata(g, obj.BitsScalar)
proggendata(g, obj.BitsScalar)
diff --git a/src/cmd/internal/gc/reg.go b/src/cmd/internal/gc/reg.go
index 4cc9286..37a394c 100644
--- a/src/cmd/internal/gc/reg.go
+++ b/src/cmd/internal/gc/reg.go
@@ -74,7 +74,7 @@
var v *Var
var node *Node
- for bany(&bit) != 0 {
+ for bany(&bit) {
// convert each bit to a variable
i = bnum(bit)
@@ -169,9 +169,9 @@
p1.From.Type = obj.TYPE_REG
p1.From.Reg = int16(rn)
p1.From.Name = obj.NAME_NONE
- if !(f != 0) {
+ if f == 0 {
p1.From = *a
- *a = obj.Zprog.From
+ *a = obj.Addr{}
a.Type = obj.TYPE_REG
a.Reg = int16(rn)
}
@@ -182,18 +182,18 @@
Ostats.Nspill++
}
-func overlap_reg(o1 int64, w1 int, o2 int64, w2 int) int {
+func overlap_reg(o1 int64, w1 int, o2 int64, w2 int) bool {
var t1 int64
var t2 int64
t1 = o1 + int64(w1)
t2 = o2 + int64(w2)
- if !(t1 > o2 && t2 > o1) {
- return 0
+ if t1 <= o2 || t2 <= o1 {
+ return false
}
- return 1
+ return true
}
func mkvar(f *Flow, a *obj.Addr) Bits {
@@ -292,7 +292,7 @@
if int(v.etype) == et {
if int64(v.width) == w {
// TODO(rsc): Remove special case for arm here.
- if !(flag != 0) || Thearch.Thechar != '5' {
+ if flag == 0 || Thearch.Thechar != '5' {
return blsh(uint(i))
}
}
@@ -300,7 +300,7 @@
}
// if they overlap, disable both
- if overlap_reg(v.offset, v.width, o, int(w)) != 0 {
+ if overlap_reg(v.offset, v.width, o, int(w)) {
// print("disable overlap %s %d %d %d %d, %E != %E\n", s->name, v->offset, v->width, o, w, v->etype, et);
v.addr = 1
@@ -446,7 +446,7 @@
switch f1.Prog.As {
case obj.ACALL:
- if Noreturn(f1.Prog) != 0 {
+ if Noreturn(f1.Prog) {
break
}
@@ -499,7 +499,7 @@
// This will set the bits at most twice, keeping the overall loop linear.
v1, _ = v.node.Opt.(*Var)
- if v == v1 || !(btest(&cal, uint(v1.id)) != 0) {
+ if v == v1 || !btest(&cal, uint(v1.id)) {
for ; v1 != nil; v1 = v1.nextinnode {
biset(&cal, uint(v1.id))
}
@@ -633,7 +633,7 @@
return
}
for {
- if !(r.refbehind.b[z]&bb != 0) {
+ if r.refbehind.b[z]&bb == 0 {
break
}
f1 = f.P1
@@ -641,7 +641,7 @@
break
}
r1 = f1.Data.(*Reg)
- if !(r1.refahead.b[z]&bb != 0) {
+ if r1.refahead.b[z]&bb == 0 {
break
}
if r1.act.b[z]&bb != 0 {
@@ -679,7 +679,7 @@
}
}
- if !(r.refahead.b[z]&bb != 0) {
+ if r.refahead.b[z]&bb == 0 {
break
}
f1 = f.S2
@@ -696,7 +696,7 @@
if r.act.b[z]&bb != 0 {
break
}
- if !(r.refbehind.b[z]&bb != 0) {
+ if r.refbehind.b[z]&bb == 0 {
break
}
}
@@ -714,11 +714,11 @@
bb = 1 << uint(bn%64)
vreg = regbits
r = f.Data.(*Reg)
- if !(r.act.b[z]&bb != 0) {
+ if r.act.b[z]&bb == 0 {
return vreg
}
for {
- if !(r.refbehind.b[z]&bb != 0) {
+ if r.refbehind.b[z]&bb == 0 {
break
}
f1 = f.P1
@@ -726,10 +726,10 @@
break
}
r1 = f1.Data.(*Reg)
- if !(r1.refahead.b[z]&bb != 0) {
+ if r1.refahead.b[z]&bb == 0 {
break
}
- if !(r1.act.b[z]&bb != 0) {
+ if r1.act.b[z]&bb == 0 {
break
}
f = f1
@@ -753,7 +753,7 @@
}
}
- if !(r.refahead.b[z]&bb != 0) {
+ if r.refahead.b[z]&bb == 0 {
break
}
f1 = f.S2
@@ -767,10 +767,10 @@
break
}
r = f.Data.(*Reg)
- if !(r.act.b[z]&bb != 0) {
+ if r.act.b[z]&bb == 0 {
break
}
- if !(r.refbehind.b[z]&bb != 0) {
+ if r.refbehind.b[z]&bb == 0 {
break
}
}
@@ -793,7 +793,7 @@
return
}
for {
- if !(r.refbehind.b[z]&bb != 0) {
+ if r.refbehind.b[z]&bb == 0 {
break
}
f1 = f.P1
@@ -801,7 +801,7 @@
break
}
r1 = f1.Data.(*Reg)
- if !(r1.refahead.b[z]&bb != 0) {
+ if r1.refahead.b[z]&bb == 0 {
break
}
if r1.act.b[z]&bb != 0 {
@@ -851,7 +851,7 @@
}
}
- if !(r.refahead.b[z]&bb != 0) {
+ if r.refahead.b[z]&bb == 0 {
break
}
f1 = f.S2
@@ -868,7 +868,7 @@
if r.act.b[z]&bb != 0 {
break
}
- if !(r.refbehind.b[z]&bb != 0) {
+ if r.refbehind.b[z]&bb == 0 {
break
}
}
@@ -896,33 +896,33 @@
for z = 0; z < BITS; z++ {
bit.b[z] = r.set.b[z] | r.use1.b[z] | r.use2.b[z] | r.refbehind.b[z] | r.refahead.b[z] | r.calbehind.b[z] | r.calahead.b[z] | r.regdiff.b[z] | r.act.b[z] | 0
}
- if bany(&bit) != 0 {
+ if bany(&bit) {
fmt.Printf("\t")
- if bany(&r.set) != 0 {
+ if bany(&r.set) {
fmt.Printf(" s:%v", Qconv(r.set, 0))
}
- if bany(&r.use1) != 0 {
+ if bany(&r.use1) {
fmt.Printf(" u1:%v", Qconv(r.use1, 0))
}
- if bany(&r.use2) != 0 {
+ if bany(&r.use2) {
fmt.Printf(" u2:%v", Qconv(r.use2, 0))
}
- if bany(&r.refbehind) != 0 {
+ if bany(&r.refbehind) {
fmt.Printf(" rb:%v ", Qconv(r.refbehind, 0))
}
- if bany(&r.refahead) != 0 {
+ if bany(&r.refahead) {
fmt.Printf(" ra:%v ", Qconv(r.refahead, 0))
}
- if bany(&r.calbehind) != 0 {
+ if bany(&r.calbehind) {
fmt.Printf(" cb:%v ", Qconv(r.calbehind, 0))
}
- if bany(&r.calahead) != 0 {
+ if bany(&r.calahead) {
fmt.Printf(" ca:%v ", Qconv(r.calahead, 0))
}
- if bany(&r.regdiff) != 0 {
+ if bany(&r.regdiff) {
fmt.Printf(" d:%v ", Qconv(r.regdiff, 0))
}
- if bany(&r.act) != 0 {
+ if bany(&r.act) {
fmt.Printf(" a:%v ", Qconv(r.act, 0))
}
}
@@ -1052,7 +1052,7 @@
r.set.b[0] |= info.Regset
bit = mkvar(f, &p.From)
- if bany(&bit) != 0 {
+ if bany(&bit) {
if info.Flags&LeftAddr != 0 {
setaddrs(bit)
}
@@ -1080,7 +1080,7 @@
}
bit = mkvar(f, &p.To)
- if bany(&bit) != 0 {
+ if bany(&bit) {
if info.Flags&RightAddr != 0 {
setaddrs(bit)
}
@@ -1143,7 +1143,7 @@
for f = firstf; f != nil; f = f.Link {
p = f.Prog
- if p.As == obj.AVARDEF && Isfat(((p.To.Node).(*Node)).Type) != 0 && ((p.To.Node).(*Node)).Opt != nil {
+ if p.As == obj.AVARDEF && Isfat(((p.To.Node).(*Node)).Type) && ((p.To.Node).(*Node)).Opt != nil {
active++
walkvardef(p.To.Node.(*Node), f, active)
}
@@ -1172,7 +1172,7 @@
for f = firstf; f != nil; f = f1 {
f1 = f.Link
- if f1 != nil && f1.Active != 0 && !(f.Active != 0) {
+ if f1 != nil && f1.Active != 0 && f.Active == 0 {
prop(f, zbits, zbits)
i = 1
}
@@ -1244,7 +1244,7 @@
for z = 0; z < BITS; z++ {
bit.b[z] = (r.refahead.b[z] | r.calahead.b[z]) &^ (externs.b[z] | params.b[z] | addrs.b[z] | consts.b[z])
}
- if bany(&bit) != 0 && !(f.Refset != 0) {
+ if bany(&bit) && f.Refset == 0 {
// should never happen - all variables are preset
if Debug['w'] != 0 {
fmt.Printf("%v: used and not set: %v\n", f.Prog.Line(), Qconv(bit, 0))
@@ -1262,7 +1262,7 @@
for z = 0; z < BITS; z++ {
bit.b[z] = r.set.b[z] &^ (r.refahead.b[z] | r.calahead.b[z] | addrs.b[z])
}
- if bany(&bit) != 0 && !(f.Refset != 0) {
+ if bany(&bit) && f.Refset == 0 {
if Debug['w'] != 0 {
fmt.Printf("%v: set and not used: %v\n", f.Prog.Line(), Qconv(bit, 0))
}
@@ -1273,7 +1273,7 @@
for z = 0; z < BITS; z++ {
bit.b[z] = LOAD(r, z) &^ (r.act.b[z] | addrs.b[z])
}
- for bany(&bit) != 0 {
+ for bany(&bit) {
i = bnum(bit)
change = 0
paint1(f, i)
@@ -1354,7 +1354,7 @@
* pass 7
* peep-hole on basic block
*/
- if !(Debug['R'] != 0) || Debug['P'] != 0 {
+ if Debug['R'] == 0 || Debug['P'] != 0 {
Thearch.Peep(firstp)
}
diff --git a/src/cmd/internal/gc/select.go b/src/cmd/internal/gc/select.go
index 9e659d1..ab7a144 100644
--- a/src/cmd/internal/gc/select.go
+++ b/src/cmd/internal/gc/select.go
@@ -134,7 +134,6 @@
switch n.Op {
default:
Fatal("select %v", Oconv(int(n.Op), 0))
- fallthrough
// ok already
case OSEND:
@@ -232,7 +231,6 @@
switch n.Op {
default:
Fatal("select %v", Oconv(int(n.Op), 0))
- fallthrough
// if selectnbsend(c, v) { body } else { default body }
case OSEND:
@@ -299,7 +297,6 @@
switch n.Op {
default:
Fatal("select %v", Oconv(int(n.Op), 0))
- fallthrough
// selectsend(sel *byte, hchan *chan any, elem *any) (selected bool);
case OSEND:
diff --git a/src/cmd/internal/gc/sinit.go b/src/cmd/internal/gc/sinit.go
index 6d044f1..57422b4 100644
--- a/src/cmd/internal/gc/sinit.go
+++ b/src/cmd/internal/gc/sinit.go
@@ -155,7 +155,7 @@
if n.Defn.Left != n {
goto bad
}
- if isblank(n.Defn.Left) && candiscard(n.Defn.Right) != 0 {
+ if isblank(n.Defn.Left) && candiscard(n.Defn.Right) {
n.Defn.Op = OEMPTY
n.Defn.Left = nil
n.Defn.Right = nil
@@ -166,7 +166,7 @@
if Debug['j'] != 0 {
fmt.Printf("%v\n", Sconv(n.Sym, 0))
}
- if isblank(n) || !(staticinit(n, out) != 0) {
+ if isblank(n) || !staticinit(n, out) {
if Debug['%'] != 0 {
Dump("nonstatic", n.Defn)
}
@@ -275,7 +275,7 @@
* compilation of top-level (static) assignments
* into DATA statements if at all possible.
*/
-func staticinit(n *Node, out **NodeList) int {
+func staticinit(n *Node, out **NodeList) bool {
var l *Node
var r *Node
@@ -291,7 +291,7 @@
// like staticassign but we are copying an already
// initialized value r.
-func staticcopy(l *Node, r *Node, out **NodeList) int {
+func staticcopy(l *Node, r *Node, out **NodeList) bool {
var i int
var e *InitEntry
var p *InitPlan
@@ -302,37 +302,37 @@
var n1 Node
if r.Op != ONAME || r.Class != PEXTERN || r.Sym.Pkg != localpkg {
- return 0
+ return false
}
if r.Defn == nil { // probably zeroed but perhaps supplied externally and of unknown value
- return 0
+ return false
}
if r.Defn.Op != OAS {
- return 0
+ return false
}
orig = r
r = r.Defn.Right
switch r.Op {
case ONAME:
- if staticcopy(l, r, out) != 0 {
- return 1
+ if staticcopy(l, r, out) {
+ return true
}
*out = list(*out, Nod(OAS, l, r))
- return 1
+ return true
case OLITERAL:
- if iszero(r) != 0 {
- return 1
+ if iszero(r) {
+ return true
}
gdata(l, r, int(l.Type.Width))
- return 1
+ return true
case OADDR:
switch r.Left.Op {
case ONAME:
gdata(l, r, int(l.Type.Width))
- return 1
+ return true
}
case OPTRLIT:
@@ -347,11 +347,11 @@
OMAPLIT:
gdata(l, Nod(OADDR, r.Nname, nil), int(l.Type.Width))
- return 1
+ return true
}
case OARRAYLIT:
- if Isslice(r.Type) != 0 {
+ if Isslice(r.Type) {
// copy slice
a = r.Nname
@@ -362,7 +362,7 @@
gdata(&n1, r.Right, Widthint)
n1.Xoffset = l.Xoffset + int64(Array_cap)
gdata(&n1, r.Right, Widthint)
- return 1
+ return true
}
fallthrough
@@ -381,7 +381,7 @@
ll = Nod(OXXX, nil, nil)
*ll = n1
ll.Orig = ll // completely separate copy
- if !(staticassign(ll, e.Expr, out) != 0) {
+ if !staticassign(ll, e.Expr, out) {
// Requires computation, but we're
// copying someone else's computation.
rr = Nod(OXXX, nil, nil)
@@ -395,13 +395,13 @@
}
}
- return 1
+ return true
}
- return 0
+ return false
}
-func staticassign(l *Node, r *Node, out **NodeList) int {
+func staticassign(l *Node, r *Node, out **NodeList) bool {
var a *Node
var n1 Node
var nam Node
@@ -422,18 +422,18 @@
}
case OLITERAL:
- if iszero(r) != 0 {
- return 1
+ if iszero(r) {
+ return true
}
gdata(l, r, int(l.Type.Width))
- return 1
+ return true
case OADDR:
- if stataddr(&nam, r.Left) != 0 {
+ if stataddr(&nam, r.Left) {
n1 = *r
n1.Left = &nam
gdata(l, &n1, int(l.Type.Width))
- return 1
+ return true
}
fallthrough
@@ -453,22 +453,22 @@
gdata(l, Nod(OADDR, a, nil), int(l.Type.Width))
// Init underlying literal.
- if !(staticassign(a, r.Left, out) != 0) {
+ if !staticassign(a, r.Left, out) {
*out = list(*out, Nod(OAS, a, r.Left))
}
- return 1
+ return true
}
case OSTRARRAYBYTE:
if l.Class == PEXTERN && r.Left.Op == OLITERAL {
sval = r.Left.Val.U.Sval
slicebytes(l, sval.S, len(sval.S))
- return 1
+ return true
}
case OARRAYLIT:
initplan(r)
- if Isslice(r.Type) != 0 {
+ if Isslice(r.Type) {
// Init slice.
ta = typ(TARRAY)
@@ -505,20 +505,20 @@
a = Nod(OXXX, nil, nil)
*a = n1
a.Orig = a // completely separate copy
- if !(staticassign(a, e.Expr, out) != 0) {
+ if !staticassign(a, e.Expr, out) {
*out = list(*out, Nod(OAS, a, e.Expr))
}
}
}
- return 1
+ return true
// TODO: Table-driven map insert.
case OMAPLIT:
break
}
- return 0
+ return false
}
/*
@@ -534,27 +534,27 @@
namebuf = fmt.Sprintf("statictmp_%.4d", statuniqgen)
statuniqgen++
n = newname(Lookup(namebuf))
- if !(ctxt != 0) {
+ if ctxt == 0 {
n.Readonly = 1
}
addvar(n, t, PEXTERN)
return n
}
-func isliteral(n *Node) int {
+func isliteral(n *Node) bool {
if n.Op == OLITERAL {
if n.Val.Ctype != CTNIL {
- return 1
+ return true
}
}
- return 0
+ return false
}
-func simplename(n *Node) int {
+func simplename(n *Node) bool {
if n.Op != ONAME {
goto no
}
- if !(n.Addable != 0) {
+ if n.Addable == 0 {
goto no
}
if n.Class&PHEAP != 0 {
@@ -563,10 +563,10 @@
if n.Class == PPARAMREF {
goto no
}
- return 1
+ return true
no:
- return 0
+ return false
}
func litas(l *Node, r *Node, init **NodeList) {
@@ -591,13 +591,13 @@
mode = 0
switch n.Op {
default:
- if isliteral(n) != 0 {
+ if isliteral(n) {
return MODECONST
}
return MODEDYNAM
case OARRAYLIT:
- if !(top != 0) && n.Type.Bound < 0 {
+ if top == 0 && n.Type.Bound < 0 {
return MODEDYNAM
}
fallthrough
@@ -657,7 +657,7 @@
continue
}
- if isliteral(value) != 0 {
+ if isliteral(value) {
if pass == 2 {
continue
}
@@ -725,7 +725,7 @@
continue
}
- if isliteral(index) != 0 && isliteral(value) != 0 {
+ if isliteral(index) && isliteral(value) {
if pass == 2 {
continue
}
@@ -881,7 +881,7 @@
index = r.Left
value = r.Right
a = Nod(OINDEX, var_, index)
- a.Bounded = 1
+ a.Bounded = true
// TODO need to check bounds?
@@ -898,7 +898,7 @@
continue
}
- if isliteral(index) != 0 && isliteral(value) != 0 {
+ if isliteral(index) && isliteral(value) {
continue
}
@@ -951,7 +951,7 @@
index = r.Left
value = r.Right
- if isliteral(index) != 0 && isliteral(value) != 0 {
+ if isliteral(index) && isliteral(value) {
b++
}
}
@@ -999,7 +999,7 @@
index = r.Left
value = r.Right
- if isliteral(index) != 0 && isliteral(value) != 0 {
+ if isliteral(index) && isliteral(value) {
// build vstat[b].a = key;
a = Nodintconst(b)
@@ -1033,11 +1033,11 @@
index = temp(Types[TINT])
a = Nod(OINDEX, vstat, index)
- a.Bounded = 1
+ a.Bounded = true
a = Nod(ODOT, a, newname(symb))
r = Nod(OINDEX, vstat, index)
- r.Bounded = 1
+ r.Bounded = true
r = Nod(ODOT, r, newname(syma))
r = Nod(OINDEX, var_, r)
@@ -1068,7 +1068,7 @@
index = r.Left
value = r.Right
- if isliteral(index) != 0 && isliteral(value) != 0 {
+ if isliteral(index) && isliteral(value) {
continue
}
@@ -1118,10 +1118,9 @@
switch n.Op {
default:
Fatal("anylit: not lit")
- fallthrough
case OPTRLIT:
- if !(Isptr[t.Etype] != 0) {
+ if Isptr[t.Etype] == 0 {
Fatal("anylit: not ptr")
}
@@ -1150,7 +1149,7 @@
Fatal("anylit: not struct")
}
- if simplename(var_) != 0 && count(n.List) > 4 {
+ if simplename(var_) && count(n.List) > 4 {
if ctxt == 0 {
// lay out static data
vstat = staticname(t, ctxt)
@@ -1176,7 +1175,7 @@
}
// initialize of not completely specified
- if simplename(var_) != 0 || count(n.List) < structcount(t) {
+ if simplename(var_) || count(n.List) < structcount(t) {
a = Nod(OAS, var_, nil)
typecheck(&a, Etop)
walkexpr(&a, init)
@@ -1194,7 +1193,7 @@
break
}
- if simplename(var_) != 0 && count(n.List) > 4 {
+ if simplename(var_) && count(n.List) > 4 {
if ctxt == 0 {
// lay out static data
vstat = staticname(t, ctxt)
@@ -1220,7 +1219,7 @@
}
// initialize of not completely specified
- if simplename(var_) != 0 || int64(count(n.List)) < t.Bound {
+ if simplename(var_) || int64(count(n.List)) < t.Bound {
a = Nod(OAS, var_, nil)
typecheck(&a, Etop)
walkexpr(&a, init)
@@ -1237,7 +1236,7 @@
}
}
-func oaslit(n *Node, init **NodeList) int {
+func oaslit(n *Node, init **NodeList) bool {
var ctxt int
if n.Left == nil || n.Right == nil {
@@ -1246,7 +1245,7 @@
if n.Left.Type == nil || n.Right.Type == nil {
goto no
}
- if !(simplename(n.Left) != 0) {
+ if !simplename(n.Left) {
goto no
}
if !Eqtype(n.Left.Type, n.Right.Type) {
@@ -1268,28 +1267,28 @@
case OSTRUCTLIT,
OARRAYLIT,
OMAPLIT:
- if vmatch1(n.Left, n.Right) != 0 {
+ if vmatch1(n.Left, n.Right) {
goto no
}
anylit(ctxt, n.Right, n.Left, init)
}
n.Op = OEMPTY
- return 1
+ return true
// not a special composit literal assignment
no:
- return 0
+ return false
}
func getlit(lit *Node) int {
- if Smallintconst(lit) != 0 {
+ if Smallintconst(lit) {
return int(Mpgetfix(lit.Val.U.Xval))
}
return -1
}
-func stataddr(nam *Node, n *Node) int {
+func stataddr(nam *Node, n *Node) bool {
var l int
if n == nil {
@@ -1299,21 +1298,21 @@
switch n.Op {
case ONAME:
*nam = *n
- return int(n.Addable)
+ return n.Addable != 0
case ODOT:
- if !(stataddr(nam, n.Left) != 0) {
+ if !stataddr(nam, n.Left) {
break
}
nam.Xoffset += n.Xoffset
nam.Type = n.Type
- return 1
+ return true
case OINDEX:
if n.Left.Type.Bound < 0 {
break
}
- if !(stataddr(nam, n.Left) != 0) {
+ if !stataddr(nam, n.Left) {
break
}
l = getlit(n.Right)
@@ -1327,11 +1326,11 @@
}
nam.Xoffset += int64(l) * n.Type.Width
nam.Type = n.Type
- return 1
+ return true
}
no:
- return 0
+ return false
}
func initplan(n *Node) {
@@ -1347,12 +1346,11 @@
switch n.Op {
default:
Fatal("initplan")
- fallthrough
case OARRAYLIT:
for l = n.List; l != nil; l = l.Next {
a = l.N
- if a.Op != OKEY || !(Smallintconst(a.Left) != 0) {
+ if a.Op != OKEY || !Smallintconst(a.Left) {
Fatal("initplan arraylit")
}
addvalue(p, n.Type.Type.Width*Mpgetfix(a.Left.Val.U.Xval), nil, a.Right)
@@ -1384,13 +1382,13 @@
var e *InitEntry
// special case: zero can be dropped entirely
- if iszero(n) != 0 {
+ if iszero(n) {
p.Zero += n.Type.Width
return
}
// special case: inline struct and array (not slice) literals
- if isvaluelit(n) != 0 {
+ if isvaluelit(n) {
initplan(n)
q = n.Initplan
for i = 0; i < len(q.E); i++ {
@@ -1414,7 +1412,7 @@
e.Expr = n
}
-func iszero(n *Node) int {
+func iszero(n *Node) bool {
var l *NodeList
switch n.Op {
@@ -1423,30 +1421,29 @@
default:
Dump("unexpected literal", n)
Fatal("iszero")
- fallthrough
case CTNIL:
- return 1
+ return true
case CTSTR:
- return bool2int(n.Val.U.Sval == nil || len(n.Val.U.Sval.S) == 0)
+ return n.Val.U.Sval == nil || len(n.Val.U.Sval.S) == 0
case CTBOOL:
- return bool2int(n.Val.U.Bval == 0)
+ return n.Val.U.Bval == 0
case CTINT,
CTRUNE:
- return bool2int(mpcmpfixc(n.Val.U.Xval, 0) == 0)
+ return mpcmpfixc(n.Val.U.Xval, 0) == 0
case CTFLT:
- return bool2int(mpcmpfltc(n.Val.U.Fval, 0) == 0)
+ return mpcmpfltc(n.Val.U.Fval, 0) == 0
case CTCPLX:
- return bool2int(mpcmpfltc(&n.Val.U.Cval.Real, 0) == 0 && mpcmpfltc(&n.Val.U.Cval.Imag, 0) == 0)
+ return mpcmpfltc(&n.Val.U.Cval.Real, 0) == 0 && mpcmpfltc(&n.Val.U.Cval.Imag, 0) == 0
}
case OARRAYLIT:
- if Isslice(n.Type) != 0 {
+ if Isslice(n.Type) {
break
}
fallthrough
@@ -1454,18 +1451,18 @@
// fall through
case OSTRUCTLIT:
for l = n.List; l != nil; l = l.Next {
- if !(iszero(l.N.Right) != 0) {
- return 0
+ if !iszero(l.N.Right) {
+ return false
}
}
- return 1
+ return true
}
- return 0
+ return false
}
-func isvaluelit(n *Node) int {
- return bool2int((n.Op == OARRAYLIT && Isfixedarray(n.Type) != 0) || n.Op == OSTRUCTLIT)
+func isvaluelit(n *Node) bool {
+ return (n.Op == OARRAYLIT && Isfixedarray(n.Type)) || n.Op == OSTRUCTLIT
}
func entry(p *InitPlan) *InitEntry {
@@ -1473,7 +1470,7 @@
return &p.E[len(p.E)-1]
}
-func gen_as_init(n *Node) int {
+func gen_as_init(n *Node) bool {
var nr *Node
var nl *Node
var nam Node
@@ -1486,7 +1483,7 @@
nr = n.Right
nl = n.Left
if nr == nil {
- if !(stataddr(&nam, nl) != 0) {
+ if !stataddr(&nam, nl) {
goto no
}
if nam.Class != PEXTERN {
@@ -1499,7 +1496,7 @@
goto no
}
- if !(stataddr(&nam, nl) != 0) {
+ if !stataddr(&nam, nl) {
goto no
}
@@ -1562,7 +1559,7 @@
}
yes:
- return 1
+ return true
slice:
gused(nil) // in case the data is the dest of a goto
@@ -1598,5 +1595,5 @@
Fatal("gen_as_init couldnt make data statement")
}
- return 0
+ return false
}
diff --git a/src/cmd/internal/gc/subr.go b/src/cmd/internal/gc/subr.go
index c28bfbd..c8e613c 100644
--- a/src/cmd/internal/gc/subr.go
+++ b/src/cmd/internal/gc/subr.go
@@ -119,7 +119,7 @@
hcrash()
nerrors++
- if nsavederrors+nerrors >= 10 && !(Debug['e'] != 0) {
+ if nsavederrors+nerrors >= 10 && Debug['e'] == 0 {
Flusherrors()
fmt.Printf("%v: too many errors\n", Ctxt.Line(line))
errorexit()
@@ -192,7 +192,7 @@
hcrash()
nerrors++
- if nsavederrors+nerrors >= 10 && !(Debug['e'] != 0) {
+ if nsavederrors+nerrors >= 10 && Debug['e'] == 0 {
Flusherrors()
fmt.Printf("%v: too many errors\n", Ctxt.Line(parserline()))
errorexit()
@@ -248,7 +248,7 @@
fmt.Printf(" at line %v\n", Ctxt.Line(int(lexlineno)))
}
- if off < 0 && file[0] != '/' && !(relative != 0) {
+ if off < 0 && file[0] != '/' && relative == 0 {
file = fmt.Sprintf("%s/%s", Ctxt.Pathname, file)
}
obj.Linklinehist(Ctxt, int(lexlineno), file, int(off))
@@ -384,6 +384,26 @@
}
}
+func gethunk() {
+ var h string
+ var nh int32
+
+ nh = NHUNK
+ if thunk >= 10*NHUNK {
+ nh = 10 * NHUNK
+ }
+ h = string(make([]byte, nh))
+ if h == "" {
+ Flusherrors()
+ Yyerror("out of memory")
+ errorexit()
+ }
+
+ hunk = h
+ nhunk = nh
+ thunk += nh
+}
+
func Nod(op int, nleft *Node, nright *Node) *Node {
var n *Node
@@ -412,14 +432,14 @@
// ispaddedfield reports whether the given field
// is followed by padding. For the case where t is
// the last field, total gives the size of the enclosing struct.
-func ispaddedfield(t *Type, total int64) int {
+func ispaddedfield(t *Type, total int64) bool {
if t.Etype != TFIELD {
Fatal("ispaddedfield called non-field %v", Tconv(t, 0))
}
if t.Down == nil {
- return bool2int(t.Width+t.Type.Width != total)
+ return t.Width+t.Type.Width != total
}
- return bool2int(t.Width+t.Type.Width != t.Down.Width)
+ return t.Width+t.Type.Width != t.Down.Width
}
func algtype1(t *Type, bad **Type) int {
@@ -486,13 +506,13 @@
return ASTRING
case TINTER:
- if isnilinter(t) != 0 {
+ if isnilinter(t) {
return ANILINTER
}
return AINTER
case TARRAY:
- if Isslice(t) != 0 {
+ if Isslice(t) {
if bad != nil {
*bad = t
}
@@ -526,7 +546,7 @@
// Blank fields, padded fields, fields with non-memory
// equality need special compare.
- if a != AMEM || isblanksym(t1.Sym) || ispaddedfield(t1, t.Width) != 0 {
+ if a != AMEM || isblanksym(t1.Sym) || ispaddedfield(t1, t.Width) {
ret = -1
continue
}
@@ -544,7 +564,7 @@
a = algtype1(t, nil)
if a == AMEM || a == ANOEQ {
- if Isslice(t) != 0 {
+ if Isslice(t) {
return ASLICE
}
switch t.Width {
@@ -687,7 +707,7 @@
for {
tmp11 := i
i--
- if !(tmp11 > 0) {
+ if tmp11 <= 0 {
break
}
a[i].Down = f
@@ -748,12 +768,12 @@
return c
}
-func Nodbool(b int) *Node {
+func Nodbool(b bool) *Node {
var c *Node
c = Nodintconst(0)
c.Val.Ctype = CTBOOL
- c.Val.U.Bval = int16(b)
+ c.Val.U.Bval = int16(bool2int(b))
c.Type = idealbool
return c
}
@@ -829,46 +849,46 @@
return m
}
-func isnil(n *Node) int {
+func isnil(n *Node) bool {
if n == nil {
- return 0
+ return false
}
if n.Op != OLITERAL {
- return 0
+ return false
}
if n.Val.Ctype != CTNIL {
- return 0
+ return false
}
- return 1
+ return true
}
-func isptrto(t *Type, et int) int {
+func isptrto(t *Type, et int) bool {
if t == nil {
- return 0
+ return false
}
- if !(Isptr[t.Etype] != 0) {
- return 0
+ if Isptr[t.Etype] == 0 {
+ return false
}
t = t.Type
if t == nil {
- return 0
+ return false
}
if int(t.Etype) != et {
- return 0
+ return false
}
- return 1
+ return true
}
-func Istype(t *Type, et int) int {
- return bool2int(t != nil && int(t.Etype) == et)
+func Istype(t *Type, et int) bool {
+ return t != nil && int(t.Etype) == et
}
-func Isfixedarray(t *Type) int {
- return bool2int(t != nil && t.Etype == TARRAY && t.Bound >= 0)
+func Isfixedarray(t *Type) bool {
+ return t != nil && t.Etype == TARRAY && t.Bound >= 0
}
-func Isslice(t *Type) int {
- return bool2int(t != nil && t.Etype == TARRAY && t.Bound < 0)
+func Isslice(t *Type) bool {
+ return t != nil && t.Etype == TARRAY && t.Bound < 0
}
func isblank(n *Node) bool {
@@ -882,34 +902,34 @@
return s != nil && s.Name == "_"
}
-func Isinter(t *Type) int {
- return bool2int(t != nil && t.Etype == TINTER)
+func Isinter(t *Type) bool {
+ return t != nil && t.Etype == TINTER
}
-func isnilinter(t *Type) int {
- if !(Isinter(t) != 0) {
- return 0
+func isnilinter(t *Type) bool {
+ if !Isinter(t) {
+ return false
}
if t.Type != nil {
- return 0
+ return false
}
- return 1
+ return true
}
-func isideal(t *Type) int {
+func isideal(t *Type) bool {
if t == nil {
- return 0
+ return false
}
if t == idealstring || t == idealbool {
- return 1
+ return true
}
switch t.Etype {
case TNIL,
TIDEAL:
- return 1
+ return true
}
- return 0
+ return false
}
/*
@@ -938,7 +958,7 @@
}
// check types
- if !(issimple[t.Etype] != 0) {
+ if issimple[t.Etype] == 0 {
switch t.Etype {
default:
return nil
@@ -979,13 +999,13 @@
next *TypePairList
}
-func onlist(l *TypePairList, t1 *Type, t2 *Type) int {
+func onlist(l *TypePairList, t1 *Type, t2 *Type) bool {
for ; l != nil; l = l.next {
if (l.t1 == t1 && l.t2 == t2) || (l.t1 == t2 && l.t2 == t1) {
- return 1
+ return true
}
}
- return 0
+ return false
}
// Return 1 if t1 and t2 are identical, following the spec rules.
@@ -995,17 +1015,17 @@
// pointer (t1 == t2), so there's no chance of chasing cycles
// ad infinitum, so no need for a depth counter.
func Eqtype(t1 *Type, t2 *Type) bool {
- return eqtype1(t1, t2, nil) != 0
+ return eqtype1(t1, t2, nil)
}
-func eqtype1(t1 *Type, t2 *Type, assumed_equal *TypePairList) int {
+func eqtype1(t1 *Type, t2 *Type, assumed_equal *TypePairList) bool {
var l TypePairList
if t1 == t2 {
- return 1
+ return true
}
if t1 == nil || t2 == nil || t1.Etype != t2.Etype {
- return 0
+ return false
}
if t1.Sym != nil || t2.Sym != nil {
// Special case: we keep byte and uint8 separate
@@ -1013,21 +1033,21 @@
switch t1.Etype {
case TUINT8:
if (t1 == Types[TUINT8] || t1 == bytetype) && (t2 == Types[TUINT8] || t2 == bytetype) {
- return 1
+ return true
}
case TINT,
TINT32:
if (t1 == Types[runetype.Etype] || t1 == runetype) && (t2 == Types[runetype.Etype] || t2 == runetype) {
- return 1
+ return true
}
}
- return 0
+ return false
}
- if onlist(assumed_equal, t1, t2) != 0 {
- return 1
+ if onlist(assumed_equal, t1, t2) {
+ return true
}
l.next = assumed_equal
l.t1 = t1
@@ -1042,7 +1062,7 @@
if t1.Etype != TFIELD || t2.Etype != TFIELD {
Fatal("struct/interface missing field: %v %v", Tconv(t1, 0), Tconv(t2, 0))
}
- if t1.Sym != t2.Sym || t1.Embedded != t2.Embedded || !(eqtype1(t1.Type, t2.Type, &l) != 0) || !eqnote(t1.Note, t2.Note) {
+ if t1.Sym != t2.Sym || t1.Embedded != t2.Embedded || !eqtype1(t1.Type, t2.Type, &l) || !eqnote(t1.Note, t2.Note) {
goto no
}
}
@@ -1071,7 +1091,7 @@
if ta.Etype != TFIELD || tb.Etype != TFIELD {
Fatal("func struct missing field: %v %v", Tconv(ta, 0), Tconv(tb, 0))
}
- if ta.Isddd != tb.Isddd || !(eqtype1(ta.Type, tb.Type, &l) != 0) {
+ if ta.Isddd != tb.Isddd || !eqtype1(ta.Type, tb.Type, &l) {
goto no
}
}
@@ -1097,34 +1117,34 @@
}
}
- if eqtype1(t1.Down, t2.Down, &l) != 0 && eqtype1(t1.Type, t2.Type, &l) != 0 {
+ if eqtype1(t1.Down, t2.Down, &l) && eqtype1(t1.Type, t2.Type, &l) {
goto yes
}
goto no
yes:
- return 1
+ return true
no:
- return 0
+ return false
}
// Are t1 and t2 equal struct types when field names are ignored?
// For deciding whether the result struct from g can be copied
// directly when compiling f(g()).
-func eqtypenoname(t1 *Type, t2 *Type) int {
+func eqtypenoname(t1 *Type, t2 *Type) bool {
if t1 == nil || t2 == nil || t1.Etype != TSTRUCT || t2.Etype != TSTRUCT {
- return 0
+ return false
}
t1 = t1.Type
t2 = t2.Type
for {
if !Eqtype(t1, t2) {
- return 0
+ return false
}
if t1 == nil {
- return 1
+ return true
}
t1 = t1.Down
t2 = t2.Down
@@ -1167,13 +1187,13 @@
// both are empty interface types.
// For assignable but different non-empty interface types,
// we want to recompute the itab.
- if Eqtype(src.Orig, dst.Orig) && (src.Sym == nil || dst.Sym == nil || isnilinter(src) != 0) {
+ if Eqtype(src.Orig, dst.Orig) && (src.Sym == nil || dst.Sym == nil || isnilinter(src)) {
return OCONVNOP
}
// 3. dst is an interface type and src implements dst.
if dst.Etype == TINTER && src.Etype != TNIL {
- if implements(src, dst, &missing, &have, &ptr) != 0 {
+ if implements(src, dst, &missing, &have, &ptr) {
return OCONVIFACE
}
@@ -1183,9 +1203,9 @@
}
if why != nil {
- if isptrto(src, TINTER) != 0 {
+ if isptrto(src, TINTER) {
*why = fmt.Sprintf(":\n\t%v is pointer to interface, not interface", Tconv(src, 0))
- } else if have != nil && have.Sym == missing.Sym && have.Nointerface != 0 {
+ } else if have != nil && have.Sym == missing.Sym && have.Nointerface {
*why = fmt.Sprintf(":\n\t%v does not implement %v (%v method is marked 'nointerface')", Tconv(src, 0), Tconv(dst, 0), Sconv(missing.Sym, 0))
} else if have != nil && have.Sym == missing.Sym {
*why = fmt.Sprintf(":\n\t%v does not implement %v (wrong type for %v method)\n"+"\t\thave %v%v\n\t\twant %v%v", Tconv(src, 0), Tconv(dst, 0), Sconv(missing.Sym, 0), Sconv(have.Sym, 0), Tconv(have.Type, obj.FmtShort|obj.FmtByte), Sconv(missing.Sym, 0), Tconv(missing.Type, obj.FmtShort|obj.FmtByte))
@@ -1201,7 +1221,7 @@
return 0
}
- if isptrto(dst, TINTER) != 0 {
+ if isptrto(dst, TINTER) {
if why != nil {
*why = fmt.Sprintf(":\n\t%v is pointer to interface, not interface", Tconv(dst, 0))
}
@@ -1209,7 +1229,7 @@
}
if src.Etype == TINTER && dst.Etype != TBLANK {
- if why != nil && implements(dst, src, &missing, &have, &ptr) != 0 {
+ if why != nil && implements(dst, src, &missing, &have, &ptr) {
*why = ": need type assertion"
}
return 0
@@ -1322,7 +1342,7 @@
return ORUNESTR
}
- if Isslice(src) != 0 && dst.Etype == TSTRING {
+ if Isslice(src) && dst.Etype == TSTRING {
if src.Type.Etype == bytetype.Etype {
return OARRAYBYTESTR
}
@@ -1333,7 +1353,7 @@
// 7. src is a string and dst is []byte or []rune.
// String to slice.
- if src.Etype == TSTRING && Isslice(dst) != 0 {
+ if src.Etype == TSTRING && Isslice(dst) {
if dst.Type.Etype == bytetype.Etype {
return OSTRARRAYBYTE
}
@@ -1408,23 +1428,23 @@
return r
}
-func subtype(stp **Type, t *Type, d int) int {
+func subtype(stp **Type, t *Type, d int) bool {
var st *Type
loop:
st = *stp
if st == nil {
- return 0
+ return false
}
d++
if d >= 10 {
- return 0
+ return false
}
switch st.Etype {
default:
- return 0
+ return false
case TPTR32,
TPTR64,
@@ -1434,13 +1454,13 @@
goto loop
case TANY:
- if !(st.Copyany != 0) {
- return 0
+ if st.Copyany == 0 {
+ return false
}
*stp = t
case TMAP:
- if subtype(&st.Down, t, d) != 0 {
+ if subtype(&st.Down, t, d) {
break
}
stp = &st.Type
@@ -1448,51 +1468,51 @@
case TFUNC:
for {
- if subtype(&st.Type, t, d) != 0 {
+ if subtype(&st.Type, t, d) {
break
}
- if subtype(&st.Type.Down.Down, t, d) != 0 {
+ if subtype(&st.Type.Down.Down, t, d) {
break
}
- if subtype(&st.Type.Down, t, d) != 0 {
+ if subtype(&st.Type.Down, t, d) {
break
}
- return 0
+ return false
}
case TSTRUCT:
for st = st.Type; st != nil; st = st.Down {
- if subtype(&st.Type, t, d) != 0 {
- return 1
+ if subtype(&st.Type, t, d) {
+ return true
}
}
- return 0
+ return false
}
- return 1
+ return true
}
/*
* Is this a 64-bit type?
*/
-func Is64(t *Type) int {
+func Is64(t *Type) bool {
if t == nil {
- return 0
+ return false
}
switch Simtype[t.Etype] {
case TINT64,
TUINT64,
TPTR64:
- return 1
+ return true
}
- return 0
+ return false
}
/*
* Is a conversion between t1 and t2 a no-op?
*/
-func Noconv(t1 *Type, t2 *Type) int {
+func Noconv(t1 *Type, t2 *Type) bool {
var e1 int
var e2 int
@@ -1502,35 +1522,35 @@
switch e1 {
case TINT8,
TUINT8:
- return bool2int(e2 == TINT8 || e2 == TUINT8)
+ return e2 == TINT8 || e2 == TUINT8
case TINT16,
TUINT16:
- return bool2int(e2 == TINT16 || e2 == TUINT16)
+ return e2 == TINT16 || e2 == TUINT16
case TINT32,
TUINT32,
TPTR32:
- return bool2int(e2 == TINT32 || e2 == TUINT32 || e2 == TPTR32)
+ return e2 == TINT32 || e2 == TUINT32 || e2 == TPTR32
case TINT64,
TUINT64,
TPTR64:
- return bool2int(e2 == TINT64 || e2 == TUINT64 || e2 == TPTR64)
+ return e2 == TINT64 || e2 == TUINT64 || e2 == TPTR64
case TFLOAT32:
- return bool2int(e2 == TFLOAT32)
+ return e2 == TFLOAT32
case TFLOAT64:
- return bool2int(e2 == TFLOAT64)
+ return e2 == TFLOAT64
}
- return 0
+ return false
}
func argtype(on *Node, t *Type) {
dowidth(t)
- if !(subtype(&on.Type, t, 0) != 0) {
+ if !subtype(&on.Type, t, 0) {
Fatal("argtype: failed %v %v\n", Nconv(on, 0), Tconv(t, 0))
}
}
@@ -1607,7 +1627,7 @@
Fatal("syslook: can't find runtime.%s", name)
}
- if !(copy != 0) {
+ if copy == 0 {
return s.Def
}
@@ -1886,7 +1906,7 @@
var fp *Type
fp = structnext(s)
- if fp == nil && !(s.Done != 0) {
+ if fp == nil && s.Done == 0 {
s.Done = 1
fp = Structfirst(s, getinarg(s.Tfunc))
}
@@ -2039,7 +2059,7 @@
}
// make a copy; must not be used as an lvalue
- if islvalue(n) != 0 {
+ if islvalue(n) {
Fatal("missing lvalue case in safeexpr: %v", Nconv(n, 0))
}
return cheapexpr(n, init)
@@ -2077,7 +2097,7 @@
* assignment to it.
*/
func localexpr(n *Node, t *Type, init **NodeList) *Node {
- if n.Op == ONAME && (!(n.Addrtaken != 0) || strings.HasPrefix(n.Sym.Name, "autotmp_")) && (n.Class == PAUTO || n.Class == PPARAM || n.Class == PPARAMOUT) && convertop(n.Type, t, nil) == OCONVNOP {
+ if n.Op == ONAME && (n.Addrtaken == 0 || strings.HasPrefix(n.Sym.Name, "autotmp_")) && (n.Class == PAUTO || n.Class == PPARAM || n.Class == PPARAMOUT) && convertop(n.Type, t, nil) == OCONVNOP {
return n
}
@@ -2182,7 +2202,7 @@
d--
for f = u.Type; f != nil; f = f.Down {
- if !(f.Embedded != 0) {
+ if f.Embedded == 0 {
continue
}
if f.Sym == nil {
@@ -2343,7 +2363,7 @@
}
for f = u.Type; f != nil; f = f.Down {
- if !(f.Embedded != 0) {
+ if f.Embedded == 0 {
continue
}
if f.Sym == nil {
@@ -2583,10 +2603,10 @@
dot = adddot(Nod(OXDOT, this.Left, newname(method.Sym)))
// generate call
- if !(flag_race != 0) && Isptr[rcvr.Etype] != 0 && Isptr[methodrcvr.Etype] != 0 && method.Embedded != 0 && !(isifacemethod(method.Type) != 0) {
+ if flag_race == 0 && Isptr[rcvr.Etype] != 0 && Isptr[methodrcvr.Etype] != 0 && method.Embedded != 0 && !isifacemethod(method.Type) {
// generate tail call: adjust pointer receiver and jump to embedded method.
dot = dot.Left // skip final .M
- if !(Isptr[dotlist[0].field.Type.Etype] != 0) {
+ if Isptr[dotlist[0].field.Type.Etype] == 0 {
dot = Nod(OADDR, dot, nil)
}
as = Nod(OAS, this.Left, Nod(OCONVNOP, dot, nil))
@@ -2625,7 +2645,7 @@
// Set inl_nonlocal to whether we are calling a method on a
// type defined in a different package. Checked in inlvar.
- if !(methodrcvr.Local != 0) {
+ if methodrcvr.Local == 0 {
inl_nonlocal = 1
}
@@ -2666,7 +2686,6 @@
switch a {
case AMEM:
Fatal("hashfor with AMEM type")
- fallthrough
case AINTER:
sym = Pkglookup("interhash", Runtimepkg)
@@ -2760,10 +2779,9 @@
switch t.Etype {
default:
Fatal("genhash %v", Tconv(t, 0))
- fallthrough
case TARRAY:
- if Isslice(t) != 0 {
+ if Isslice(t) {
Fatal("genhash %v", Tconv(t, 0))
}
@@ -2798,7 +2816,7 @@
call = Nod(OCALL, hashel, nil)
nx = Nod(OINDEX, np, ni)
- nx.Bounded = 1
+ nx.Bounded = true
na = Nod(OADDR, nx, nil)
na.Etype = 1 // no escape to heap
call.List = list(call.List, na)
@@ -2821,7 +2839,7 @@
}
// If it's a memory field but it's padded, stop here.
- if ispaddedfield(t1, t.Width) != 0 {
+ if ispaddedfield(t1, t.Width) {
t1 = t1.Down
} else {
continue
@@ -2924,7 +2942,7 @@
nif = Nod(OIF, nil, nil)
nif.Ntest = Nod(ONE, nx, ny)
r = Nod(ORETURN, nil, nil)
- r.List = list(r.List, Nodbool(0))
+ r.List = list(r.List, Nodbool(false))
nif.Nbody = list(nif.Nbody, r)
return nif
}
@@ -2981,7 +2999,7 @@
nif.Ninit = list(nif.Ninit, call)
nif.Ntest = Nod(ONOT, call, nil)
r = Nod(ORETURN, nil, nil)
- r.List = list(r.List, Nodbool(0))
+ r.List = list(r.List, Nodbool(false))
nif.Nbody = list(nif.Nbody, r)
return nif
}
@@ -3040,10 +3058,9 @@
switch t.Etype {
default:
Fatal("geneq %v", Tconv(t, 0))
- fallthrough
case TARRAY:
- if Isslice(t) != 0 {
+ if Isslice(t) {
Fatal("geneq %v", Tconv(t, 0))
}
@@ -3064,14 +3081,14 @@
// if p[i] != q[i] { return false }
nx = Nod(OINDEX, np, ni)
- nx.Bounded = 1
+ nx.Bounded = true
ny = Nod(OINDEX, nq, ni)
- ny.Bounded = 1
+ ny.Bounded = true
nif = Nod(OIF, nil, nil)
nif.Ntest = Nod(ONE, nx, ny)
r = Nod(ORETURN, nil, nil)
- r.List = list(r.List, Nodbool(0))
+ r.List = list(r.List, Nodbool(false))
nif.Nbody = list(nif.Nbody, r)
nrange.Nbody = list(nrange.Nbody, nif)
fn.Nbody = list(fn.Nbody, nrange)
@@ -3091,7 +3108,7 @@
}
// If it's a memory field but it's padded, stop here.
- if ispaddedfield(t1, t.Width) != 0 {
+ if ispaddedfield(t1, t.Width) {
t1 = t1.Down
} else {
continue
@@ -3134,7 +3151,7 @@
// return true
r = Nod(ORETURN, nil, nil)
- r.List = list(r.List, Nodbool(1))
+ r.List = list(r.List, Nodbool(true))
fn.Nbody = list(fn.Nbody, r)
if Debug['r'] != 0 {
@@ -3199,7 +3216,7 @@
return nil
}
-func implements(t *Type, iface *Type, m **Type, samename **Type, ptr *int) int {
+func implements(t *Type, iface *Type, m **Type, samename **Type, ptr *int) bool {
var t0 *Type
var im *Type
var tm *Type
@@ -3209,7 +3226,7 @@
t0 = t
if t == nil {
- return 0
+ return false
}
// if this is too slow,
@@ -3226,18 +3243,18 @@
*m = im
*samename = tm
*ptr = 0
- return 0
+ return false
}
}
*m = im
*samename = nil
*ptr = 0
- return 0
+ return false
found:
}
- return 1
+ return true
}
t = methtype(t, 0)
@@ -3247,21 +3264,21 @@
for im = iface.Type; im != nil; im = im.Down {
imtype = methodfunc(im.Type, nil)
tm = ifacelookdot(im.Sym, t, &followptr, 0)
- if tm == nil || tm.Nointerface != 0 || !Eqtype(methodfunc(tm.Type, nil), imtype) {
+ if tm == nil || tm.Nointerface || !Eqtype(methodfunc(tm.Type, nil), imtype) {
if tm == nil {
tm = ifacelookdot(im.Sym, t, &followptr, 1)
}
*m = im
*samename = tm
*ptr = 0
- return 0
+ return false
}
// if pointer receiver in method,
// the method does not exist for value types.
rcvr = getthisx(tm.Type).Type.Type
- if Isptr[rcvr.Etype] != 0 && !(Isptr[t0.Etype] != 0) && !(followptr != 0) && !(isifacemethod(tm.Type) != 0) {
+ if Isptr[rcvr.Etype] != 0 && Isptr[t0.Etype] == 0 && followptr == 0 && !isifacemethod(tm.Type) {
if false && Debug['r'] != 0 {
Yyerror("interface pointer mismatch")
}
@@ -3269,11 +3286,11 @@
*m = im
*samename = nil
*ptr = 1
- return 0
+ return false
}
}
- return 1
+ return true
}
/*
@@ -3470,7 +3487,7 @@
if n == nil || n.Op != OLITERAL || n.Type == nil {
goto no
}
- if !(Isint[n.Type.Etype] != 0) {
+ if Isint[n.Type.Etype] == 0 {
goto no
}
@@ -3483,7 +3500,7 @@
b = b << 1
}
- if !(Issigned[n.Type.Etype] != 0) {
+ if Issigned[n.Type.Etype] == 0 {
goto no
}
@@ -3895,7 +3912,7 @@
func checknil(x *Node, init **NodeList) {
var n *Node
- if Isinter(x.Type) != 0 {
+ if Isinter(x.Type) {
x = Nod(OITAB, x, nil)
typecheck(&x, Erv)
}
@@ -3909,7 +3926,7 @@
* Can this type be stored directly in an interface word?
* Yes, if the representation is a single pointer.
*/
-func isdirectiface(t *Type) int {
+func isdirectiface(t *Type) bool {
switch t.Etype {
case TPTR32,
TPTR64,
@@ -3917,16 +3934,16 @@
TMAP,
TFUNC,
TUNSAFEPTR:
- return 1
+ return true
// Array of 1 direct iface type can be direct.
case TARRAY:
- return bool2int(t.Bound == 1 && isdirectiface(t.Type) != 0)
+ return t.Bound == 1 && isdirectiface(t.Type)
// Struct with 1 field of direct iface type can be direct.
case TSTRUCT:
- return bool2int(t.Type != nil && t.Type.Down == nil && isdirectiface(t.Type.Type) != 0)
+ return t.Type != nil && t.Type.Down == nil && isdirectiface(t.Type.Type)
}
- return 0
+ return false
}
diff --git a/src/cmd/internal/gc/swt.go b/src/cmd/internal/gc/swt.go
index cf1f7d4..7c25041 100644
--- a/src/cmd/internal/gc/swt.go
+++ b/src/cmd/internal/gc/swt.go
@@ -281,7 +281,7 @@
var go_ *Node
var br *Node
var lno int32
- var needvar int32
+ var needvar bool
if sw.List == nil {
return
@@ -301,7 +301,7 @@
Fatal("casebody %v", Oconv(int(n.Op), 0))
}
n.Op = OCASE
- needvar = int32(bool2int(count(n.List) != 1 || n.List.N.Op == OLITERAL))
+ needvar = count(n.List) != 1 || n.List.N.Op == OLITERAL
go_ = Nod(OGOTO, newlabel_swt(), nil)
if n.List == nil {
@@ -332,7 +332,7 @@
}
stat = list(stat, Nod(OLABEL, go_.Left, nil))
- if typeswvar != nil && needvar != 0 && n.Nname != nil {
+ if typeswvar != nil && needvar && n.Nname != nil {
var l *NodeList
l = list1(Nod(ODCL, n.Nname, nil))
@@ -410,7 +410,7 @@
continue
}
- if Istype(n.Left.Type, TINTER) != 0 {
+ if Istype(n.Left.Type, TINTER) {
c.type_ = Ttypevar
continue
}
@@ -552,7 +552,7 @@
casebody(sw, nil)
arg = Snorm
- if Isconst(sw.Ntest, CTBOOL) != 0 {
+ if Isconst(sw.Ntest, CTBOOL) {
arg = Strue
if sw.Ntest.Val.U.Bval == 0 {
arg = Sfalse
@@ -572,7 +572,7 @@
cas = nil
if arg == Strue || arg == Sfalse {
- exprname = Nodbool(bool2int(arg == Strue))
+ exprname = Nodbool(arg == Strue)
} else if consttype(sw.Ntest) >= 0 {
// leave constants to enable dead code elimination (issue 9608)
exprname = sw.Ntest
@@ -600,7 +600,7 @@
}
// deal with the variables one-at-a-time
- if !(okforcmp[t.Etype] != 0) || c0.type_ != Texprconst {
+ if okforcmp[t.Etype] == 0 || c0.type_ != Texprconst {
a = exprbsw(c0, 1, arg)
cas = list(cas, a)
c0 = c0.link
@@ -738,7 +738,7 @@
}
walkexpr(&sw.Ntest.Right, &sw.Ninit)
- if !(Istype(sw.Ntest.Right.Type, TINTER) != 0) {
+ if !Istype(sw.Ntest.Right.Type, TINTER) {
Yyerror("type switch must be on an interface")
return
}
@@ -764,7 +764,7 @@
typecheck(&hashname, Erv)
t = sw.Ntest.Right.Type
- if isnilinter(t) != 0 {
+ if isnilinter(t) {
a = syslook("efacethash", 1)
} else {
a = syslook("ifacethash", 1)
@@ -871,7 +871,7 @@
* both have inserted OBREAK statements
*/
if sw.Ntest == nil {
- sw.Ntest = Nodbool(1)
+ sw.Ntest = Nodbool(true)
typecheck(&sw.Ntest, Erv)
}
@@ -933,11 +933,11 @@
t = Types[TBOOL]
}
if t != nil {
- if !(okforeq[t.Etype] != 0) {
+ if okforeq[t.Etype] == 0 {
Yyerror("cannot switch on %v", Nconv(n.Ntest, obj.FmtLong))
- } else if t.Etype == TARRAY && !(Isfixedarray(t) != 0) {
+ } else if t.Etype == TARRAY && !Isfixedarray(t) {
nilonly = "slice"
- } else if t.Etype == TARRAY && Isfixedarray(t) != 0 && algtype1(t, nil) == ANOEQ {
+ } else if t.Etype == TARRAY && Isfixedarray(t) && algtype1(t, nil) == ANOEQ {
Yyerror("cannot switch on %v", Nconv(n.Ntest, obj.FmtLong))
} else if t.Etype == TSTRUCT && algtype1(t, &badtype) == ANOEQ {
Yyerror("cannot switch on %v (struct containing %v cannot be compared)", Nconv(n.Ntest, obj.FmtLong), Tconv(badtype, 0))
@@ -976,27 +976,27 @@
if ll.N.Op == OTYPE {
Yyerror("type %v is not an expression", Tconv(ll.N.Type, 0))
- } else if ll.N.Type != nil && !(assignop(ll.N.Type, t, nil) != 0) && !(assignop(t, ll.N.Type, nil) != 0) {
+ } else if ll.N.Type != nil && assignop(ll.N.Type, t, nil) == 0 && assignop(t, ll.N.Type, nil) == 0 {
if n.Ntest != nil {
Yyerror("invalid case %v in switch on %v (mismatched types %v and %v)", Nconv(ll.N, 0), Nconv(n.Ntest, 0), Tconv(ll.N.Type, 0), Tconv(t, 0))
} else {
Yyerror("invalid case %v in switch (mismatched types %v and bool)", Nconv(ll.N, 0), Tconv(ll.N.Type, 0))
}
- } else if nilonly != "" && !(Isconst(ll.N, CTNIL) != 0) {
+ } else if nilonly != "" && !Isconst(ll.N, CTNIL) {
Yyerror("invalid case %v in switch (can only compare %s %v to nil)", Nconv(ll.N, 0), nilonly, Nconv(n.Ntest, 0))
}
case Etype: // type switch
- if ll.N.Op == OLITERAL && Istype(ll.N.Type, TNIL) != 0 {
+ if ll.N.Op == OLITERAL && Istype(ll.N.Type, TNIL) {
} else if ll.N.Op != OTYPE && ll.N.Type != nil { // should this be ||?
Yyerror("%v is not a type", Nconv(ll.N, obj.FmtLong))
// reset to original type
ll.N = n.Ntest.Right
- } else if ll.N.Type.Etype != TINTER && t.Etype == TINTER && !(implements(ll.N.Type, t, &missing, &have, &ptr) != 0) {
- if have != nil && !(missing.Broke != 0) && !(have.Broke != 0) {
+ } else if ll.N.Type.Etype != TINTER && t.Etype == TINTER && !implements(ll.N.Type, t, &missing, &have, &ptr) {
+ if have != nil && missing.Broke == 0 && have.Broke == 0 {
Yyerror("impossible type switch case: %v cannot have dynamic type %v"+" (wrong type for %v method)\n\thave %v%v\n\twant %v%v", Nconv(n.Ntest.Right, obj.FmtLong), Tconv(ll.N.Type, 0), Sconv(missing.Sym, 0), Sconv(have.Sym, 0), Tconv(have.Type, obj.FmtShort), Sconv(missing.Sym, 0), Tconv(missing.Type, obj.FmtShort))
- } else if !(missing.Broke != 0) {
+ } else if missing.Broke == 0 {
Yyerror("impossible type switch case: %v cannot have dynamic type %v"+" (missing %v method)", Nconv(n.Ntest.Right, obj.FmtLong), Tconv(ll.N.Type, 0), Sconv(missing.Sym, 0))
}
}
@@ -1008,7 +1008,7 @@
ll = ncase.List
nvar = ncase.Nname
if nvar != nil {
- if ll != nil && ll.Next == nil && ll.N.Type != nil && !(Istype(ll.N.Type, TNIL) != 0) {
+ if ll != nil && ll.Next == nil && ll.N.Type != nil && !Istype(ll.N.Type, TNIL) {
// single entry type switch
nvar.Ntype = typenod(ll.N.Type)
} else {
diff --git a/src/cmd/internal/gc/typecheck.go b/src/cmd/internal/gc/typecheck.go
index 9bba6e7..3cd7408 100644
--- a/src/cmd/internal/gc/typecheck.go
+++ b/src/cmd/internal/gc/typecheck.go
@@ -83,7 +83,7 @@
var et int
var s string
- if Isslice(t) != 0 {
+ if Isslice(t) {
return "slice"
}
et = int(t.Etype)
@@ -133,7 +133,7 @@
var l *NodeList
// cannot type check until all the source has been parsed
- if !(typecheckok != 0) {
+ if typecheckok == 0 {
Fatal("early typecheck")
}
@@ -233,9 +233,9 @@
/*
* does n contain a call or receive operation?
*/
-func callrecv(n *Node) int {
+func callrecv(n *Node) bool {
if n == nil {
- return 0
+ return false
}
switch n.Op {
@@ -250,19 +250,19 @@
ONEW,
OAPPEND,
ODELETE:
- return 1
+ return true
}
- return bool2int(callrecv(n.Left) != 0 || callrecv(n.Right) != 0 || callrecv(n.Ntest) != 0 || callrecv(n.Nincr) != 0 || callrecvlist(n.Ninit) != 0 || callrecvlist(n.Nbody) != 0 || callrecvlist(n.Nelse) != 0 || callrecvlist(n.List) != 0 || callrecvlist(n.Rlist) != 0)
+ return callrecv(n.Left) || callrecv(n.Right) || callrecv(n.Ntest) || callrecv(n.Nincr) || callrecvlist(n.Ninit) || callrecvlist(n.Nbody) || callrecvlist(n.Nelse) || callrecvlist(n.List) || callrecvlist(n.Rlist)
}
-func callrecvlist(l *NodeList) int {
+func callrecvlist(l *NodeList) bool {
for ; l != nil; l = l.Next {
- if callrecv(l.N) != 0 {
- return 1
+ if callrecv(l.N) {
+ return true
}
}
- return 0
+ return false
}
// indexlit implements typechecking of untyped values as
@@ -273,7 +273,7 @@
var n *Node
n = *np
- if n == nil || !(isideal(n.Type) != 0) {
+ if n == nil || !isideal(n.Type) {
return
}
switch consttype(n) {
@@ -315,7 +315,7 @@
n = *np
if n.Sym != nil {
- if n.Op == ONAME && n.Etype != 0 && !(top&Ecall != 0) {
+ if n.Op == ONAME && n.Etype != 0 && top&Ecall == 0 {
Yyerror("use of builtin %v not in function call", Sconv(n.Sym, 0))
goto error
}
@@ -336,7 +336,6 @@
Dump("typecheck", n)
Fatal("typecheck %v", Oconv(int(n.Op), 0))
- fallthrough
/*
* names
@@ -362,7 +361,7 @@
goto ret
}
- if !(top&Easgn != 0) {
+ if top&Easgn == 0 {
// not a write to the variable
if isblank(n) {
Yyerror("cannot use _ as value")
@@ -372,7 +371,7 @@
n.Used = 1
}
- if !(top&Ecall != 0) && isunsafebuiltin(n) != 0 {
+ if top&Ecall == 0 && isunsafebuiltin(n) {
Yyerror("%v is not an expression, must be called", Nconv(n, 0))
goto error
}
@@ -406,7 +405,7 @@
t.Bound = -1 // slice
} else if l.Op == ODDD {
t.Bound = -100 // to be filled in
- if !(top&Ecomplit != 0) && !(n.Diag != 0) {
+ if top&Ecomplit == 0 && n.Diag == 0 {
t.Broke = 1
n.Diag = 1
Yyerror("use of [...] array outside of array literal")
@@ -431,7 +430,7 @@
}
t.Bound = Mpgetfix(v.U.Xval)
- if doesoverflow(v, Types[TINT]) != 0 {
+ if doesoverflow(v, Types[TINT]) {
Yyerror("array bound is too large")
goto error
} else if t.Bound < 0 {
@@ -510,7 +509,7 @@
case OIND:
ntop = Erv | Etype
- if !(top&Eaddr != 0) { // The *x in &*x is not an indirect.
+ if top&Eaddr == 0 {
ntop |= Eindir
}
ntop |= top & Ecomplit
@@ -527,7 +526,7 @@
goto ret
}
- if !(Isptr[t.Etype] != 0) {
+ if Isptr[t.Etype] == 0 {
if top&(Erv|Etop) != 0 {
Yyerror("invalid indirect of %v", Nconv(n.Left, obj.FmtLong))
goto error
@@ -593,7 +592,7 @@
if t == nil {
goto error
}
- if !(okfor[n.Op][t.Etype] != 0) {
+ if okfor[n.Op][t.Etype] == 0 {
Yyerror("invalid operation: %v %v", Oconv(int(n.Op), 0), Tconv(t, 0))
goto error
}
@@ -671,8 +670,8 @@
r = n.Right
if n.Left.Op == OTYPE {
- if !(looktypedot(n, t, 0) != 0) {
- if looktypedot(n, t, 1) != 0 {
+ if !looktypedot(n, t, 0) {
+ if looktypedot(n, t, 1) {
Yyerror("%v undefined (cannot refer to unexported method %v)", Nconv(n, 0), Sconv(n.Right.Sym, 0))
} else {
Yyerror("%v undefined (type %v has no method %v)", Nconv(n, 0), Tconv(t, 0), Sconv(n.Right.Sym, 0))
@@ -709,8 +708,8 @@
goto error
}
- if !(lookdot(n, t, 0) != 0) {
- if lookdot(n, t, 1) != 0 {
+ if !lookdot(n, t, 0) {
+ if lookdot(n, t, 1) {
Yyerror("%v undefined (cannot refer to unexported field or method %v)", Nconv(n, 0), Sconv(n.Right.Sym, 0))
} else {
Yyerror("%v undefined (type %v has no field or method %v)", Nconv(n, 0), Tconv(n.Left.Type, 0), Sconv(n.Right.Sym, 0))
@@ -743,7 +742,7 @@
if t == nil {
goto error
}
- if !(Isinter(t) != 0) {
+ if !Isinter(t) {
Yyerror("invalid type assertion: %v (non-interface type %v on left)", Nconv(n, 0), Tconv(t, 0))
goto error
}
@@ -758,7 +757,7 @@
}
if n.Type != nil && n.Type.Etype != TINTER {
- if !(implements(n.Type, t, &missing, &have, &ptr) != 0) {
+ if !implements(n.Type, t, &missing, &have, &ptr) {
if have != nil && have.Sym == missing.Sym {
Yyerror("impossible type assertion:\n\t%v does not implement %v (wrong type for %v method)\n"+"\t\thave %v%v\n\t\twant %v%v", Tconv(n.Type, 0), Tconv(t, 0), Sconv(missing.Sym, 0), Sconv(have.Sym, 0), Tconv(have.Type, obj.FmtShort|obj.FmtByte), Sconv(missing.Sym, 0), Tconv(missing.Type, obj.FmtShort|obj.FmtByte))
} else if ptr != 0 {
@@ -801,25 +800,25 @@
}
why = "string"
if t.Etype == TARRAY {
- if Isfixedarray(t) != 0 {
+ if Isfixedarray(t) {
why = "array"
} else {
why = "slice"
}
}
- if n.Right.Type != nil && !(Isint[n.Right.Type.Etype] != 0) {
+ if n.Right.Type != nil && Isint[n.Right.Type.Etype] == 0 {
Yyerror("non-integer %s index %v", why, Nconv(n.Right, 0))
break
}
- if Isconst(n.Right, CTINT) != 0 {
+ if Isconst(n.Right, CTINT) {
x = Mpgetfix(n.Right.Val.U.Xval)
if x < 0 {
Yyerror("invalid %s index %v (index must be non-negative)", why, Nconv(n.Right, 0))
- } else if Isfixedarray(t) != 0 && t.Bound > 0 && x >= t.Bound {
+ } else if Isfixedarray(t) && t.Bound > 0 && x >= t.Bound {
Yyerror("invalid array index %v (out of bounds for %d-element array)", Nconv(n.Right, 0), t.Bound)
- } else if Isconst(n.Left, CTSTR) != 0 && x >= int64(len(n.Left.Val.U.Sval.S)) {
+ } else if Isconst(n.Left, CTSTR) && x >= int64(len(n.Left.Val.U.Sval.S)) {
Yyerror("invalid string index %v (out of bounds for %d-byte string)", Nconv(n.Right, 0), len(n.Left.Val.U.Sval.S))
} else if Mpcmpfixfix(n.Right.Val.U.Xval, Maxintval[TINT]) > 0 {
Yyerror("invalid %s index %v (index too large)", why, Nconv(n.Right, 0))
@@ -852,7 +851,7 @@
goto error
}
- if !(t.Chan&Crecv != 0) {
+ if t.Chan&Crecv == 0 {
Yyerror("invalid operation: %v (receive from send-only type %v)", Nconv(n, 0), Tconv(t, 0))
goto error
}
@@ -875,7 +874,7 @@
goto error
}
- if !(t.Chan&Csend != 0) {
+ if t.Chan&Csend == 0 {
Yyerror("invalid operation: %v (send to receive-only type %v)", Nconv(n, 0), Tconv(t, 0))
goto error
}
@@ -902,8 +901,8 @@
indexlit(&n.Right.Left)
indexlit(&n.Right.Right)
l = n.Left
- if Isfixedarray(l.Type) != 0 {
- if !(islvalue(n.Left) != 0) {
+ if Isfixedarray(l.Type) {
+ if !islvalue(n.Left) {
Yyerror("invalid operation %v (slice of unaddressable value)", Nconv(n, 0))
goto error
}
@@ -919,17 +918,17 @@
goto error
}
tp = nil
- if Istype(t, TSTRING) != 0 {
+ if Istype(t, TSTRING) {
n.Type = t
n.Op = OSLICESTR
- } else if Isptr[t.Etype] != 0 && Isfixedarray(t.Type) != 0 {
+ } else if Isptr[t.Etype] != 0 && Isfixedarray(t.Type) {
tp = t.Type
n.Type = typ(TARRAY)
n.Type.Type = tp.Type
n.Type.Bound = -1
dowidth(n.Type)
n.Op = OSLICEARR
- } else if Isslice(t) != 0 {
+ } else if Isslice(t) {
n.Type = t
} else {
Yyerror("cannot slice %v (type %v)", Nconv(l, 0), Tconv(t, 0))
@@ -960,8 +959,8 @@
indexlit(&n.Right.Right.Left)
indexlit(&n.Right.Right.Right)
l = n.Left
- if Isfixedarray(l.Type) != 0 {
- if !(islvalue(n.Left) != 0) {
+ if Isfixedarray(l.Type) {
+ if !islvalue(n.Left) {
Yyerror("invalid operation %v (slice of unaddressable value)", Nconv(n, 0))
goto error
}
@@ -977,19 +976,19 @@
goto error
}
tp = nil
- if Istype(t, TSTRING) != 0 {
+ if Istype(t, TSTRING) {
Yyerror("invalid operation %v (3-index slice of string)", Nconv(n, 0))
goto error
}
- if Isptr[t.Etype] != 0 && Isfixedarray(t.Type) != 0 {
+ if Isptr[t.Etype] != 0 && Isfixedarray(t.Type) {
tp = t.Type
n.Type = typ(TARRAY)
n.Type.Type = tp.Type
n.Type.Bound = -1
dowidth(n.Type)
n.Op = OSLICE3ARR
- } else if Isslice(t) != 0 {
+ } else if Isslice(t) {
n.Type = t
} else {
Yyerror("cannot slice %v (type %v)", Nconv(l, 0), Tconv(t, 0))
@@ -1050,7 +1049,7 @@
l = n.Left
if l.Op == OTYPE {
if n.Isddd != 0 || l.Type.Bound == -100 {
- if !(l.Type.Broke != 0) {
+ if l.Type.Broke == 0 {
Yyerror("invalid use of ... in type conversion", l)
}
n.Diag = 1
@@ -1070,7 +1069,7 @@
goto doconv
}
- if count(n.List) == 1 && !(n.Isddd != 0) {
+ if count(n.List) == 1 && n.Isddd == 0 {
typecheck(&n.List.N, Erv|Efnstruct)
} else {
typechecklist(n.List, Erv)
@@ -1127,7 +1126,7 @@
}
// multiple return
- if !(top&(Efnstruct|Etop) != 0) {
+ if top&(Efnstruct|Etop) == 0 {
Yyerror("multiple-value %v() in single-value context", Nconv(l, 0))
goto ret
}
@@ -1153,21 +1152,21 @@
}
switch n.Op {
case OCAP:
- if !(okforcap[t.Etype] != 0) {
+ if okforcap[t.Etype] == 0 {
goto badcall1
}
case OLEN:
- if !(okforlen[t.Etype] != 0) {
+ if okforlen[t.Etype] == 0 {
goto badcall1
}
case OREAL,
OIMAG:
- if !(Iscomplex[t.Etype] != 0) {
+ if Iscomplex[t.Etype] == 0 {
goto badcall1
}
- if Isconst(l, CTCPLX) != 0 {
+ if Isconst(l, CTCPLX) {
r = n
if n.Op == OREAL {
n = nodfltconst(&l.Val.U.Cval.Real)
@@ -1184,7 +1183,7 @@
// might be constant
switch t.Etype {
case TSTRING:
- if Isconst(l, CTSTR) != 0 {
+ if Isconst(l, CTSTR) {
r = Nod(OXXX, nil, nil)
Nodconst(r, Types[TINT], int64(len(l.Val.U.Sval.S)))
r.Orig = n
@@ -1195,7 +1194,7 @@
if t.Bound < 0 { // slice
break
}
- if callrecv(l) != 0 { // has call or receive
+ if callrecv(l) { // has call or receive
break
}
r = Nod(OXXX, nil, nil)
@@ -1289,7 +1288,7 @@
goto error
}
- if !(t.Chan&Csend != 0) {
+ if t.Chan&Csend == 0 {
Yyerror("invalid operation: %v (cannot close receive-only channel)", Nconv(n, 0))
goto error
}
@@ -1334,7 +1333,7 @@
goto error
}
- if count(args) == 1 && !(n.Isddd != 0) {
+ if count(args) == 1 && n.Isddd == 0 {
typecheck(&args.N, Erv|Efnstruct)
} else {
typechecklist(args, Erv)
@@ -1346,16 +1345,16 @@
}
// Unpack multiple-return result before type-checking.
- if Istype(t, TSTRUCT) != 0 && t.Funarg != 0 {
+ if Istype(t, TSTRUCT) && t.Funarg != 0 {
t = t.Type
- if Istype(t, TFIELD) != 0 {
+ if Istype(t, TFIELD) {
t = t.Type
}
}
n.Type = t
- if !(Isslice(t) != 0) {
- if Isconst(args.N, CTNIL) != 0 {
+ if !Isslice(t) {
+ if Isconst(args.N, CTNIL) {
Yyerror("first argument to append must be typed slice; have untyped nil", t)
goto error
}
@@ -1375,7 +1374,7 @@
goto error
}
- if Istype(t.Type, TUINT8) != 0 && Istype(args.Next.N.Type, TSTRING) != 0 {
+ if Istype(t.Type, TUINT8) && Istype(args.Next.N.Type, TSTRING) {
defaultlit(&args.Next.N, Types[TSTRING])
goto ret
}
@@ -1422,7 +1421,7 @@
}
// copy([]byte, string)
- if Isslice(n.Left.Type) != 0 && n.Right.Type.Etype == TSTRING {
+ if Isslice(n.Left.Type) && n.Right.Type.Etype == TSTRING {
if Eqtype(n.Left.Type.Type, bytetype) {
goto ret
}
@@ -1430,10 +1429,10 @@
goto error
}
- if !(Isslice(n.Left.Type) != 0) || !(Isslice(n.Right.Type) != 0) {
- if !(Isslice(n.Left.Type) != 0) && !(Isslice(n.Right.Type) != 0) {
+ if !Isslice(n.Left.Type) || !Isslice(n.Right.Type) {
+ if !Isslice(n.Left.Type) && !Isslice(n.Right.Type) {
Yyerror("arguments to copy must be slices; have %v, %v", Tconv(n.Left.Type, obj.FmtLong), Tconv(n.Right.Type, obj.FmtLong))
- } else if !(Isslice(n.Left.Type) != 0) {
+ } else if !Isslice(n.Left.Type) {
Yyerror("first argument to copy should be slice; have %v", Tconv(n.Left.Type, obj.FmtLong))
} else {
Yyerror("second argument to copy should be slice or string; have %v", Tconv(n.Right.Type, obj.FmtLong))
@@ -1474,7 +1473,7 @@
goto error
case TARRAY:
- if !(Isslice(t) != 0) {
+ if !Isslice(t) {
Yyerror("cannot make type %v", Tconv(t, 0))
goto error
}
@@ -1502,7 +1501,7 @@
if et != 0 {
goto error
}
- if Isconst(l, CTINT) != 0 && r != nil && Isconst(r, CTINT) != 0 && Mpcmpfixfix(l.Val.U.Xval, r.Val.U.Xval) > 0 {
+ if Isconst(l, CTINT) && r != nil && Isconst(r, CTINT) && Mpcmpfixfix(l.Val.U.Xval, r.Val.U.Xval) > 0 {
Yyerror("len larger than cap in make(%v)", Tconv(t, 0))
goto error
}
@@ -1587,7 +1586,7 @@
typechecklist(n.List, Erv|Eindir) // Eindir: address does not escape
for args = n.List; args != nil; args = args.Next {
// Special case for print: int constant is int64, not int.
- if Isconst(args.N, CTINT) != 0 {
+ if Isconst(args.N, CTINT) {
defaultlit(&args.N, Types[TINT64])
} else {
defaultlit(&args.N, nil)
@@ -1646,7 +1645,7 @@
if t == nil {
goto error
}
- if !(Isslice(t) != 0) && t.Etype != TSTRING {
+ if !Isslice(t) && t.Etype != TSTRING {
Fatal("OSPTR of %v", Tconv(t, 0))
}
if t.Etype == TSTRING {
@@ -1708,7 +1707,7 @@
case ODEFER:
ok |= Etop
typecheck(&n.Left, Etop|Erv)
- if !(n.Left.Diag != 0) {
+ if n.Left.Diag == 0 {
checkdefergo(n)
}
goto ret
@@ -1809,7 +1808,7 @@
case ODCLTYPE:
ok |= Etop
typecheck(&n.Left, Etype)
- if !(incannedimport != 0) {
+ if incannedimport == 0 {
checkwidth(n.Left.Type)
}
goto ret
@@ -1850,7 +1849,7 @@
if r.Type.Etype != TBLANK {
aop = assignop(l.Type, r.Type, nil)
if aop != 0 {
- if Isinter(r.Type) != 0 && !(Isinter(l.Type) != 0) && algtype1(l.Type, nil) == ANOEQ {
+ if Isinter(r.Type) && !Isinter(l.Type) && algtype1(l.Type, nil) == ANOEQ {
Yyerror("invalid operation: %v (operator %v not defined on %s)", Nconv(n, 0), Oconv(int(op), 0), typekind(l.Type))
goto error
}
@@ -1871,7 +1870,7 @@
if l.Type.Etype != TBLANK {
aop = assignop(r.Type, l.Type, nil)
if aop != 0 {
- if Isinter(l.Type) != 0 && !(Isinter(r.Type) != 0) && algtype1(r.Type, nil) == ANOEQ {
+ if Isinter(l.Type) && !Isinter(r.Type) && algtype1(r.Type, nil) == ANOEQ {
Yyerror("invalid operation: %v (operator %v not defined on %s)", Nconv(n, 0), Oconv(int(op), 0), typekind(r.Type))
goto error
}
@@ -1905,29 +1904,29 @@
}
}
- if !(okfor[op][et] != 0) {
+ if okfor[op][et] == 0 {
Yyerror("invalid operation: %v (operator %v not defined on %s)", Nconv(n, 0), Oconv(int(op), 0), typekind(t))
goto error
}
// okfor allows any array == array, map == map, func == func.
// restrict to slice/map/func == nil and nil == slice/map/func.
- if Isfixedarray(l.Type) != 0 && algtype1(l.Type, nil) == ANOEQ {
+ if Isfixedarray(l.Type) && algtype1(l.Type, nil) == ANOEQ {
Yyerror("invalid operation: %v (%v cannot be compared)", Nconv(n, 0), Tconv(l.Type, 0))
goto error
}
- if Isslice(l.Type) != 0 && !(isnil(l) != 0) && !(isnil(r) != 0) {
+ if Isslice(l.Type) && !isnil(l) && !isnil(r) {
Yyerror("invalid operation: %v (slice can only be compared to nil)", Nconv(n, 0))
goto error
}
- if l.Type.Etype == TMAP && !(isnil(l) != 0) && !(isnil(r) != 0) {
+ if l.Type.Etype == TMAP && !isnil(l) && !isnil(r) {
Yyerror("invalid operation: %v (map can only be compared to nil)", Nconv(n, 0))
goto error
}
- if l.Type.Etype == TFUNC && !(isnil(l) != 0) && !(isnil(r) != 0) {
+ if l.Type.Etype == TFUNC && !isnil(l) && !isnil(r) {
Yyerror("invalid operation: %v (func can only be compared to nil)", Nconv(n, 0))
goto error
}
@@ -1997,7 +1996,7 @@
}
}
- if (op == ODIV || op == OMOD) && Isconst(r, CTINT) != 0 {
+ if (op == ODIV || op == OMOD) && Isconst(r, CTINT) {
if mpcmpfixc(r.Val.U.Xval, 0) == 0 {
Yyerror("division by zero")
goto error
@@ -2011,13 +2010,13 @@
defaultlit(&r, Types[TUINT])
n.Right = r
t = r.Type
- if !(Isint[t.Etype] != 0) || Issigned[t.Etype] != 0 {
+ if Isint[t.Etype] == 0 || Issigned[t.Etype] != 0 {
Yyerror("invalid operation: %v (shift count type %v, must be unsigned integer)", Nconv(n, 0), Tconv(r.Type, 0))
goto error
}
t = l.Type
- if t != nil && t.Etype != TIDEAL && !(Isint[t.Etype] != 0) {
+ if t != nil && t.Etype != TIDEAL && Isint[t.Etype] == 0 {
Yyerror("invalid operation: %v (shift of type %v)", Nconv(n, 0), Tconv(t, 0))
goto error
}
@@ -2032,14 +2031,14 @@
ok |= Erv
saveorignode(n)
typecheck(&n.Left, Erv|top&(Eindir|Eiota))
- convlit1(&n.Left, n.Type, 1)
+ convlit1(&n.Left, n.Type, true)
t = n.Left.Type
if t == nil || n.Type == nil {
goto error
}
n.Op = uint8(convertop(t, n.Type, &why))
if (n.Op) == 0 {
- if !(n.Diag != 0) && !(n.Type.Broke != 0) {
+ if n.Diag == 0 && n.Type.Broke == 0 {
Yyerror("cannot convert %v to type %v%s", Nconv(n.Left, obj.FmtLong), Tconv(n.Type, 0), why)
n.Diag = 1
}
@@ -2073,7 +2072,7 @@
ret:
t = n.Type
- if t != nil && !(t.Funarg != 0) && n.Op != OTYPE {
+ if t != nil && t.Funarg == 0 && n.Op != OTYPE {
switch t.Etype {
case TFUNC, // might have TANY; wait until its called
TANY,
@@ -2088,12 +2087,12 @@
}
}
- if safemode != 0 && !(incannedimport != 0) && !(importpkg != nil) && !(compiling_wrappers != 0) && t != nil && t.Etype == TUNSAFEPTR {
+ if safemode != 0 && incannedimport == 0 && importpkg == nil && compiling_wrappers == 0 && t != nil && t.Etype == TUNSAFEPTR {
Yyerror("cannot use unsafe.Pointer")
}
evconst(n)
- if n.Op == OTYPE && !(top&Etype != 0) {
+ if n.Op == OTYPE && top&Etype == 0 {
Yyerror("type %v is not an expression", Tconv(n.Type, 0))
goto error
}
@@ -2104,12 +2103,12 @@
}
// TODO(rsc): simplify
- if (top&(Ecall|Erv|Etype) != 0) && !(top&Etop != 0) && !(ok&(Erv|Etype|Ecall) != 0) {
+ if (top&(Ecall|Erv|Etype) != 0) && top&Etop == 0 && ok&(Erv|Etype|Ecall) == 0 {
Yyerror("%v used as value", Nconv(n, 0))
goto error
}
- if (top&Etop != 0) && !(top&(Ecall|Erv|Etype) != 0) && !(ok&Etop != 0) {
+ if (top&Etop != 0) && top&(Ecall|Erv|Etype) == 0 && ok&Etop == 0 {
if n.Diag == 0 {
Yyerror("%v evaluated but not used", Nconv(n, 0))
n.Diag = 1
@@ -2142,7 +2141,7 @@
if t == nil {
return -1
}
- if !(Isint[t.Etype] != 0) {
+ if Isint[t.Etype] == 0 {
Yyerror("invalid slice index %v (type %v)", Nconv(r, 0), Tconv(t, 0))
return -1
}
@@ -2154,7 +2153,7 @@
} else if tp != nil && tp.Bound > 0 && Mpgetfix(r.Val.U.Xval) > tp.Bound {
Yyerror("invalid slice index %v (out of bounds for %d-element array)", Nconv(r, 0), tp.Bound)
return -1
- } else if Isconst(l, CTSTR) != 0 && Mpgetfix(r.Val.U.Xval) > int64(len(l.Val.U.Sval.S)) {
+ } else if Isconst(l, CTSTR) && Mpgetfix(r.Val.U.Xval) > int64(len(l.Val.U.Sval.S)) {
Yyerror("invalid slice index %v (out of bounds for %d-byte string)", Nconv(r, 0), len(l.Val.U.Sval.S))
return -1
} else if Mpcmpfixfix(r.Val.U.Xval, Maxintval[TINT]) > 0 {
@@ -2222,7 +2221,7 @@
return
}
- if !(n.Diag != 0) {
+ if n.Diag == 0 {
// The syntax made sure it was a call, so this must be
// a conversion.
n.Diag = 1
@@ -2239,14 +2238,14 @@
n = *nn
t = n.Type
- if t == nil || !(Isptr[t.Etype] != 0) {
+ if t == nil || Isptr[t.Etype] == 0 {
return
}
t = t.Type
if t == nil {
return
}
- if !(Isfixedarray(t) != 0) {
+ if !Isfixedarray(t) {
return
}
n = Nod(OIND, n, nil)
@@ -2335,7 +2334,7 @@
return r
}
-func looktypedot(n *Node, t *Type, dostrcmp int) int {
+func looktypedot(n *Node, t *Type, dostrcmp int) bool {
var f1 *Type
var f2 *Type
var s *Sym
@@ -2345,14 +2344,14 @@
if t.Etype == TINTER {
f1 = lookdot1(n, s, t, t.Type, dostrcmp)
if f1 == nil {
- return 0
+ return false
}
n.Right = methodname(n.Right, t)
n.Xoffset = f1.Width
n.Type = f1.Type
n.Op = ODOTINTER
- return 1
+ return true
}
// Find the base type: methtype will fail if t
@@ -2360,26 +2359,26 @@
f2 = methtype(t, 0)
if f2 == nil {
- return 0
+ return false
}
expandmeth(f2)
f2 = lookdot1(n, s, f2, f2.Xmethod, dostrcmp)
if f2 == nil {
- return 0
+ return false
}
// disallow T.m if m requires *T receiver
- if Isptr[getthisx(f2.Type).Type.Type.Etype] != 0 && !(Isptr[t.Etype] != 0) && f2.Embedded != 2 && !(isifacemethod(f2.Type) != 0) {
+ if Isptr[getthisx(f2.Type).Type.Type.Etype] != 0 && Isptr[t.Etype] == 0 && f2.Embedded != 2 && !isifacemethod(f2.Type) {
Yyerror("invalid method expression %v (needs pointer receiver: (*%v).%v)", Nconv(n, 0), Tconv(t, 0), Sconv(f2.Sym, obj.FmtShort))
- return 0
+ return false
}
n.Right = methodname(n.Right, t)
n.Xoffset = f2.Width
n.Type = f2.Type
n.Op = ODOTMETH
- return 1
+ return true
}
func derefall(t *Type) *Type {
@@ -2389,7 +2388,7 @@
return t
}
-func lookdot(n *Node, t *Type, dostrcmp int) int {
+func lookdot(n *Node, t *Type, dostrcmp int) bool {
var f1 *Type
var f2 *Type
var tt *Type
@@ -2434,7 +2433,7 @@
n.Op = ODOTINTER
}
- return 1
+ return true
}
if f2 != nil {
@@ -2475,31 +2474,31 @@
// print("lookdot found [%p] %T\n", f2->type, f2->type);
n.Op = ODOTMETH
- return 1
+ return true
}
- return 0
+ return false
}
-func nokeys(l *NodeList) int {
+func nokeys(l *NodeList) bool {
for ; l != nil; l = l.Next {
if l.N.Op == OKEY {
- return 0
+ return false
}
}
- return 1
+ return true
}
-func hasddd(t *Type) int {
+func hasddd(t *Type) bool {
var tl *Type
for tl = t.Type; tl != nil; tl = tl.Down {
if tl.Isddd != 0 {
- return 1
+ return true
}
}
- return 0
+ return false
}
func downcount(t *Type) int {
@@ -2538,7 +2537,7 @@
n = nl.N
if n.Type != nil {
if n.Type.Etype == TSTRUCT && n.Type.Funarg != 0 {
- if !(hasddd(tstruct) != 0) {
+ if !hasddd(tstruct) {
n1 = downcount(tstruct)
n2 = downcount(n.Type)
if n2 > n1 {
@@ -2589,7 +2588,7 @@
n1 = downcount(tstruct)
n2 = count(nl)
- if !(hasddd(tstruct) != 0) {
+ if !hasddd(tstruct) {
if n2 > n1 {
goto toomany
}
@@ -2597,7 +2596,7 @@
goto notenough
}
} else {
- if !(isddd != 0) {
+ if isddd == 0 {
if n2 < n1-1 {
goto notenough
}
@@ -2667,7 +2666,7 @@
return
notenough:
- if n == nil || !(n.Diag != 0) {
+ if n == nil || n.Diag == 0 {
if call != nil {
Yyerror("not enough arguments in call to %v", Nconv(call, 0))
} else {
@@ -2809,15 +2808,15 @@
hash[h] = n
}
-func prime(h uint32, sr uint32) int {
+func prime(h uint32, sr uint32) bool {
var n uint32
for n = 3; n <= sr; n += 2 {
if h%n == 0 {
- return 0
+ return false
}
}
- return 1
+ return true
}
func inithash(n *Node, autohash []*Node) []*Node {
@@ -2855,7 +2854,7 @@
}
// check for primeality
- for !(prime(h, sr) != 0) {
+ for !prime(h, sr) {
h += 2
}
@@ -2863,12 +2862,12 @@
return make([]*Node, h)
}
-func iscomptype(t *Type) int {
+func iscomptype(t *Type) bool {
switch t.Etype {
case TARRAY,
TSTRUCT,
TMAP:
- return 1
+ return true
case TPTR32,
TPTR64:
@@ -2876,15 +2875,15 @@
case TARRAY,
TSTRUCT,
TMAP:
- return 1
+ return true
}
}
- return 0
+ return false
}
func pushtype(n *Node, t *Type) {
- if n == nil || n.Op != OCOMPLIT || !(iscomptype(t) != 0) {
+ if n == nil || n.Op != OCOMPLIT || !iscomptype(t) {
return
}
@@ -2946,13 +2945,13 @@
if Isptr[t.Etype] != 0 {
// For better or worse, we don't allow pointers as the composite literal type,
// except when using the &T syntax, which sets implicit on the OIND.
- if !(n.Right.Implicit != 0) {
+ if n.Right.Implicit == 0 {
Yyerror("invalid pointer type %v for composite literal (use &%v instead)", Tconv(t, 0), Tconv(t.Type, 0))
goto error
}
// Also, the underlying type must be a struct, map, slice, or array.
- if !(iscomptype(t) != 0) {
+ if !iscomptype(t) {
Yyerror("invalid pointer type %v for composite literal", Tconv(t, 0))
goto error
}
@@ -2983,7 +2982,7 @@
typecheck(&l.Left, Erv)
evconst(l.Left)
i = nonnegconst(l.Left)
- if i < 0 && !(l.Left.Diag != 0) {
+ if i < 0 && l.Left.Diag == 0 {
Yyerror("array index must be non-negative integer constant")
l.Left.Diag = 1
i = -(1 << 30) // stay negative for a while
@@ -3047,7 +3046,7 @@
case TSTRUCT:
bad = 0
- if n.List != nil && nokeys(n.List) != 0 {
+ if n.List != nil && nokeys(n.List) {
// simple list of variables
f = t.Type
@@ -3057,7 +3056,7 @@
if f == nil {
tmp12 := bad
bad++
- if !(tmp12 != 0) {
+ if tmp12 == 0 {
Yyerror("too many values in struct initializer")
}
continue
@@ -3090,7 +3089,7 @@
if l.Op != OKEY {
tmp13 := bad
bad++
- if !(tmp13 != 0) {
+ if tmp13 == 0 {
Yyerror("mixture of field:value and value initializers")
}
typecheck(&ll.N, Erv)
@@ -3164,14 +3163,14 @@
/*
* lvalue etc
*/
-func islvalue(n *Node) int {
+func islvalue(n *Node) bool {
switch n.Op {
case OINDEX:
- if Isfixedarray(n.Left.Type) != 0 {
+ if Isfixedarray(n.Left.Type) {
return islvalue(n.Left)
}
if n.Left.Type != nil && n.Left.Type.Etype == TSTRING {
- return 0
+ return false
}
fallthrough
@@ -3180,23 +3179,23 @@
ODOTPTR,
OCLOSUREVAR,
OPARAM:
- return 1
+ return true
case ODOT:
return islvalue(n.Left)
case ONAME:
if n.Class == PFUNC {
- return 0
+ return false
}
- return 1
+ return true
}
- return 0
+ return false
}
func checklvalue(n *Node, verb string) {
- if !(islvalue(n) != 0) {
+ if !islvalue(n) {
Yyerror("cannot %s %v", verb, Nconv(n, 0))
}
}
@@ -3221,7 +3220,7 @@
}
}
- if islvalue(n) != 0 {
+ if islvalue(n) {
return
}
if n.Op == OINDEXMAP {
@@ -3245,28 +3244,28 @@
// Check whether l and r are the same side effect-free expression,
// so that it is safe to reuse one instead of computing both.
-func samesafeexpr(l *Node, r *Node) int {
+func samesafeexpr(l *Node, r *Node) bool {
if l.Op != r.Op || !Eqtype(l.Type, r.Type) {
- return 0
+ return false
}
switch l.Op {
case ONAME,
OCLOSUREVAR:
- return bool2int(l == r)
+ return l == r
case ODOT,
ODOTPTR:
- return bool2int(l.Right != nil && r.Right != nil && l.Right.Sym == r.Right.Sym && samesafeexpr(l.Left, r.Left) != 0)
+ return l.Right != nil && r.Right != nil && l.Right.Sym == r.Right.Sym && samesafeexpr(l.Left, r.Left)
case OIND:
return samesafeexpr(l.Left, r.Left)
case OINDEX:
- return bool2int(samesafeexpr(l.Left, r.Left) != 0 && samesafeexpr(l.Right, r.Right) != 0)
+ return samesafeexpr(l.Left, r.Left) && samesafeexpr(l.Right, r.Right)
}
- return 0
+ return false
}
/*
@@ -3313,14 +3312,14 @@
// Recognize slices being updated in place, for better code generation later.
// Don't rewrite if using race detector, to avoid needing to teach race detector
// about this optimization.
- if n.Left != nil && n.Left.Op != OINDEXMAP && n.Right != nil && !(flag_race != 0) {
+ if n.Left != nil && n.Left.Op != OINDEXMAP && n.Right != nil && flag_race == 0 {
switch n.Right.Op {
// For x = x[0:y], x can be updated in place, without touching pointer.
// TODO(rsc): Reenable once it is actually updated in place without touching the pointer.
case OSLICE,
OSLICE3,
OSLICESTR:
- if false && samesafeexpr(n.Left, n.Right.Left) != 0 && (n.Right.Right.Left == nil || iszero(n.Right.Right.Left) != 0) {
+ if false && samesafeexpr(n.Left, n.Right.Left) && (n.Right.Right.Left == nil || iszero(n.Right.Right.Left)) {
n.Right.Reslice = 1
}
@@ -3329,7 +3328,7 @@
// can take care of updating the pointer, and only in that case.
// TODO(rsc): Reenable once the emitted code does update the pointer.
case OAPPEND:
- if false && n.Right.List != nil && samesafeexpr(n.Left, n.Right.List.N) != 0 {
+ if false && n.Right.List != nil && samesafeexpr(n.Left, n.Right.List.N) {
n.Right.Reslice = 1
}
}
@@ -3664,7 +3663,7 @@
if ntypecheckdeftype == 1 {
for {
l = methodqueue
- if !(l != nil) {
+ if l == nil {
break
}
methodqueue = nil
@@ -3704,7 +3703,7 @@
setlineno(n)
if n.Op == ONONAME {
- if !(n.Diag != 0) {
+ if n.Diag == 0 {
n.Diag = 1
if n.Lineno != 0 {
lineno = n.Lineno
@@ -3746,7 +3745,6 @@
switch n.Op {
default:
Fatal("typecheckdef %v", Oconv(int(n.Op), 0))
- fallthrough
// not really syms
case OGOTO,
@@ -3773,13 +3771,13 @@
}
typecheck(&e, Erv|Eiota)
- if Isconst(e, CTNIL) != 0 {
+ if Isconst(e, CTNIL) {
Yyerror("const initializer cannot be nil")
goto ret
}
- if e.Type != nil && e.Op != OLITERAL || !(isgoconst(e) != 0) {
- if !(e.Diag != 0) {
+ if e.Type != nil && e.Op != OLITERAL || !isgoconst(e) {
+ if e.Diag == 0 {
Yyerror("const initializer %v is not a constant", Nconv(e, 0))
e.Diag = 1
}
@@ -3789,12 +3787,12 @@
t = n.Type
if t != nil {
- if !(okforconst[t.Etype] != 0) {
+ if okforconst[t.Etype] == 0 {
Yyerror("invalid constant type %v", Tconv(t, 0))
goto ret
}
- if !(isideal(e.Type) != 0) && !Eqtype(t, e.Type) {
+ if !isideal(e.Type) && !Eqtype(t, e.Type) {
Yyerror("cannot use %v as type %v in const initializer", Nconv(e, obj.FmtLong), Tconv(t, 0))
goto ret
}
@@ -3867,7 +3865,7 @@
}
ret:
- if n.Op != OLITERAL && n.Type != nil && isideal(n.Type) != 0 {
+ if n.Op != OLITERAL && n.Type != nil && isideal(n.Type) {
Fatal("got %v for %v", Tconv(n.Type, 0), Nconv(n, 0))
}
if typecheckdefstack.N != n {
@@ -3910,7 +3908,7 @@
}
}
- if !(Isint[n.Type.Etype] != 0) && n.Type.Etype != TIDEAL {
+ if Isint[n.Type.Etype] == 0 && n.Type.Etype != TIDEAL {
Yyerror("non-integer %s argument in make(%v) - %v", arg, Tconv(t, 0), Tconv(n.Type, 0))
return -1
}
@@ -3991,12 +3989,12 @@
}
}
-func isterminating(l *NodeList, top int) int {
+func isterminating(l *NodeList, top int) bool {
var def int
var n *Node
if l == nil {
- return 0
+ return false
}
if top != 0 {
for l.Next != nil && l.N.Op != OLABEL {
@@ -4011,7 +4009,7 @@
n = l.N
if n == nil {
- return 0
+ return false
}
switch n.Op {
@@ -4028,48 +4026,48 @@
ORETJMP,
OPANIC,
OXFALL:
- return 1
+ return true
case OFOR:
if n.Ntest != nil {
- return 0
+ return false
}
if n.Hasbreak != 0 {
- return 0
+ return false
}
- return 1
+ return true
case OIF:
- return bool2int(isterminating(n.Nbody, 0) != 0 && isterminating(n.Nelse, 0) != 0)
+ return isterminating(n.Nbody, 0) && isterminating(n.Nelse, 0)
case OSWITCH,
OTYPESW,
OSELECT:
if n.Hasbreak != 0 {
- return 0
+ return false
}
def = 0
for l = n.List; l != nil; l = l.Next {
- if !(isterminating(l.N.Nbody, 0) != 0) {
- return 0
+ if !isterminating(l.N.Nbody, 0) {
+ return false
}
if l.N.List == nil { // default
def = 1
}
}
- if n.Op != OSELECT && !(def != 0) {
- return 0
+ if n.Op != OSELECT && def == 0 {
+ return false
}
- return 1
+ return true
}
- return 0
+ return false
}
func checkreturn(fn *Node) {
if fn.Type.Outtuple != 0 && fn.Nbody != nil {
- if !(isterminating(fn.Nbody, 1) != 0) {
+ if !isterminating(fn.Nbody, 1) {
yyerrorl(int(fn.Endlineno), "missing return at end of function")
}
}
diff --git a/src/cmd/internal/gc/unsafe.go b/src/cmd/internal/gc/unsafe.go
index e50ea19..3970468 100644
--- a/src/cmd/internal/gc/unsafe.go
+++ b/src/cmd/internal/gc/unsafe.go
@@ -161,18 +161,18 @@
return n
}
-func isunsafebuiltin(n *Node) int {
+func isunsafebuiltin(n *Node) bool {
if n == nil || n.Op != ONAME || n.Sym == nil || n.Sym.Pkg != unsafepkg {
- return 0
+ return false
}
if n.Sym.Name == "Sizeof" {
- return 1
+ return true
}
if n.Sym.Name == "Offsetof" {
- return 1
+ return true
}
if n.Sym.Name == "Alignof" {
- return 1
+ return true
}
- return 0
+ return false
}
diff --git a/src/cmd/internal/gc/walk.go b/src/cmd/internal/gc/walk.go
index 37299ca..dfb965e 100644
--- a/src/cmd/internal/gc/walk.go
+++ b/src/cmd/internal/gc/walk.go
@@ -86,13 +86,13 @@
}
}
-func samelist(a *NodeList, b *NodeList) int {
+func samelist(a *NodeList, b *NodeList) bool {
for ; a != nil && b != nil; (func() { a = a.Next; b = b.Next })() {
if a.N != b.N {
- return 0
+ return false
}
}
- return bool2int(a == b)
+ return a == b
}
func paramoutheap(fn *Node) int {
@@ -314,7 +314,7 @@
}
}
- if samelist(rl, n.List) != 0 {
+ if samelist(rl, n.List) {
// special return in disguise
n.List = nil
@@ -520,7 +520,7 @@
if Isptr[t.Etype] != 0 {
t = t.Type
}
- if Isfixedarray(t) != 0 {
+ if Isfixedarray(t) {
safeexpr(n.Left, init)
Nodconst(n, n.Type, t.Bound)
n.Typecheck = 1
@@ -533,8 +533,8 @@
walkexpr(&n.Left, init)
walkexpr(&n.Right, init)
t = n.Left.Type
- n.Bounded = uint8(bounded(n.Right, 8*t.Width))
- if Debug['m'] != 0 && n.Etype != 0 && !(Isconst(n.Right, CTINT) != 0) {
+ n.Bounded = bounded(n.Right, 8*t.Width)
+ if Debug['m'] != 0 && n.Etype != 0 && !Isconst(n.Right, CTINT) {
Warn("shift bounds check elided")
}
goto ret
@@ -620,7 +620,7 @@
goto ret
case ONAME:
- if !(n.Class&PHEAP != 0) && n.Class != PPARAMREF {
+ if n.Class&PHEAP == 0 && n.Class != PPARAMREF {
n.Addable = 1
}
goto ret
@@ -696,11 +696,11 @@
walkexpr(&n.Left, init)
n.Left = safeexpr(n.Left, init)
- if oaslit(n, init) != 0 {
+ if oaslit(n, init) {
goto ret
}
- if n.Right == nil || iszero(n.Right) != 0 && !(flag_race != 0) {
+ if n.Right == nil || iszero(n.Right) && flag_race == 0 {
goto ret
}
@@ -719,12 +719,12 @@
from = "I"
to = "T"
- if isnilinter(r.Left.Type) != 0 {
+ if isnilinter(r.Left.Type) {
from = "E"
}
- if isnilinter(r.Type) != 0 {
+ if isnilinter(r.Type) {
to = "E"
- } else if Isinter(r.Type) != 0 {
+ } else if Isinter(r.Type) {
to = "I"
}
@@ -920,12 +920,12 @@
from = "I"
to = "T"
- if isnilinter(r.Left.Type) != 0 {
+ if isnilinter(r.Left.Type) {
from = "E"
}
- if isnilinter(r.Type) != 0 {
+ if isnilinter(r.Type) {
to = "E"
- } else if Isinter(r.Type) != 0 {
+ } else if Isinter(r.Type) {
to = "I"
}
buf = fmt.Sprintf("assert%s2%s2", from, to)
@@ -947,13 +947,12 @@
case ODOTTYPE,
ODOTTYPE2:
Fatal("walkexpr ODOTTYPE") // should see inside OAS or OAS2 only
- fallthrough
case OCONVIFACE:
walkexpr(&n.Left, init)
// Optimize convT2E as a two-word copy when T is pointer-shaped.
- if isnilinter(n.Type) != 0 && isdirectiface(n.Left.Type) != 0 {
+ if isnilinter(n.Type) && isdirectiface(n.Left.Type) {
l = Nod(OEFACE, typename(n.Left.Type), n.Left)
l.Type = n.Type
l.Typecheck = n.Typecheck
@@ -967,25 +966,25 @@
from = "T"
to = "I"
- if isnilinter(n.Left.Type) != 0 {
+ if isnilinter(n.Left.Type) {
from = "E"
- } else if Isinter(n.Left.Type) != 0 {
+ } else if Isinter(n.Left.Type) {
from = "I"
}
- if isnilinter(n.Type) != 0 {
+ if isnilinter(n.Type) {
to = "E"
}
buf = fmt.Sprintf("conv%s2%s", from, to)
fn = syslook(buf, 1)
ll = nil
- if !(Isinter(n.Left.Type) != 0) {
+ if !Isinter(n.Left.Type) {
ll = list(ll, typename(n.Left.Type))
}
- if !(isnilinter(n.Type) != 0) {
+ if !isnilinter(n.Type) {
ll = list(ll, typename(n.Type))
}
- if !(Isinter(n.Left.Type) != 0) && !(isnilinter(n.Type) != 0) {
+ if !Isinter(n.Left.Type) && !isnilinter(n.Type) {
sym = Pkglookup(fmt.Sprintf("%v.%v", Tconv(n.Left.Type, obj.FmtLeft), Tconv(n.Type, obj.FmtLeft)), itabpkg)
if sym.Def == nil {
l = Nod(ONAME, nil, nil)
@@ -1002,7 +1001,7 @@
l.Addable = 1
ll = list(ll, l)
- if isdirectiface(n.Left.Type) != 0 {
+ if isdirectiface(n.Left.Type) {
/* For pointer types, we can make a special form of optimization
*
* These statements are put onto the expression init list:
@@ -1040,7 +1039,7 @@
}
}
- if Isinter(n.Left.Type) != 0 {
+ if Isinter(n.Left.Type) {
ll = list(ll, n.Left)
} else {
// regular types are passed by reference to avoid C vararg calls
@@ -1049,7 +1048,7 @@
// with a non-interface, especially in a switch on interface value
// with non-interface cases, is not visible to orderstmt, so we
// have to fall back on allocating a temp here.
- if islvalue(n.Left) != 0 {
+ if islvalue(n.Left) {
ll = list(ll, Nod(OADDR, n.Left, nil))
} else {
ll = list(ll, Nod(OADDR, copyexpr(n.Left, n.Left.Type, init), nil))
@@ -1174,28 +1173,28 @@
// if range of type cannot exceed static array bound,
// disable bounds check.
- if n.Bounded != 0 {
+ if n.Bounded {
goto ret
}
t = n.Left.Type
if t != nil && Isptr[t.Etype] != 0 {
t = t.Type
}
- if Isfixedarray(t) != 0 {
- n.Bounded = uint8(bounded(r, t.Bound))
- if Debug['m'] != 0 && n.Bounded != 0 && !(Isconst(n.Right, CTINT) != 0) {
+ if Isfixedarray(t) {
+ n.Bounded = bounded(r, t.Bound)
+ if Debug['m'] != 0 && n.Bounded && !Isconst(n.Right, CTINT) {
Warn("index bounds check elided")
}
- if Smallintconst(n.Right) != 0 && !(n.Bounded != 0) {
+ if Smallintconst(n.Right) && !n.Bounded {
Yyerror("index out of bounds")
}
- } else if Isconst(n.Left, CTSTR) != 0 {
- n.Bounded = uint8(bounded(r, int64(len(n.Left.Val.U.Sval.S))))
- if Debug['m'] != 0 && n.Bounded != 0 && !(Isconst(n.Right, CTINT) != 0) {
+ } else if Isconst(n.Left, CTSTR) {
+ n.Bounded = bounded(r, int64(len(n.Left.Val.U.Sval.S)))
+ if Debug['m'] != 0 && n.Bounded && !Isconst(n.Right, CTINT) {
Warn("index bounds check elided")
}
- if Smallintconst(n.Right) != 0 {
- if !(n.Bounded != 0) {
+ if Smallintconst(n.Right) {
+ if !n.Bounded {
Yyerror("index out of bounds")
} else {
// replace "abc"[1] with 'b'.
@@ -1209,7 +1208,7 @@
}
}
- if Isconst(n.Right, CTINT) != 0 {
+ if Isconst(n.Right, CTINT) {
if Mpcmpfixfix(n.Right.Val.U.Xval, &mpzero) < 0 || Mpcmpfixfix(n.Right.Val.U.Xval, Maxintval[TINT]) > 0 {
Yyerror("index out of bounds")
}
@@ -1264,7 +1263,6 @@
case ORECV:
Fatal("walkexpr ORECV") // should see inside OAS only
- fallthrough
case OSLICE:
if n.Right != nil && n.Right.Left == nil && n.Right.Right == nil { // noop
@@ -1344,7 +1342,7 @@
// comparing the lengths instead will yield the same result
// without the function call.
case OCMPSTR:
- if (Isconst(n.Left, CTSTR) != 0 && len(n.Left.Val.U.Sval.S) == 0) || (Isconst(n.Right, CTSTR) != 0 && len(n.Right.Val.U.Sval.S) == 0) {
+ if (Isconst(n.Left, CTSTR) && len(n.Left.Val.U.Sval.S) == 0) || (Isconst(n.Right, CTSTR) && len(n.Right.Val.U.Sval.S) == 0) {
r = Nod(int(n.Etype), Nod(OLEN, n.Left, nil), Nod(OLEN, n.Right, nil))
typecheck(&r, Erv)
walkexpr(&r, init)
@@ -1354,7 +1352,7 @@
}
// s + "badgerbadgerbadger" == "badgerbadgerbadger"
- if (n.Etype == OEQ || n.Etype == ONE) && Isconst(n.Right, CTSTR) != 0 && n.Left.Op == OADDSTR && count(n.Left.List) == 2 && Isconst(n.Left.List.Next.N, CTSTR) != 0 && cmpslit(n.Right, n.Left.List.Next.N) == 0 {
+ if (n.Etype == OEQ || n.Etype == ONE) && Isconst(n.Right, CTSTR) && n.Left.Op == OADDSTR && count(n.Left.List) == 2 && Isconst(n.Left.List.Next.N, CTSTR) && cmpslit(n.Right, n.Left.List.Next.N) == 0 {
r = Nod(int(n.Etype), Nod(OLEN, n.Left.List.N, nil), Nodintconst(0))
typecheck(&r, Erv)
walkexpr(&r, init)
@@ -1470,7 +1468,7 @@
l = r
}
t = n.Type
- if n.Esc == EscNone && Smallintconst(l) != 0 && Smallintconst(r) != 0 && (t.Type.Width == 0 || Mpgetfix(r.Val.U.Xval) < (1<<16)/t.Type.Width) {
+ if n.Esc == EscNone && Smallintconst(l) && Smallintconst(r) && (t.Type.Width == 0 || Mpgetfix(r.Val.U.Xval) < (1<<16)/t.Type.Width) {
// var arr [r]T
// n = arr[:l]
t = aindex(r, t.Type) // [r]T
@@ -1579,7 +1577,7 @@
if !Eqtype(n.Left.Type, n.Right.Type) {
Fatal("ifaceeq %v %v %v", Oconv(int(n.Op), 0), Tconv(n.Left.Type, 0), Tconv(n.Right.Type, 0))
}
- if isnilinter(n.Left.Type) != 0 {
+ if isnilinter(n.Left.Type) {
fn = syslook("efaceeq", 1)
} else {
fn = syslook("ifaceeq", 1)
@@ -1715,20 +1713,20 @@
* evaluating the lv or a function call
* in the conversion of the types
*/
-func fncall(l *Node, rt *Type) int {
+func fncall(l *Node, rt *Type) bool {
var r Node
if l.Ullman >= UINF || l.Op == OINDEXMAP {
- return 1
+ return true
}
r = Node{}
- if needwritebarrier(l, &r) != 0 {
- return 1
+ if needwritebarrier(l, &r) {
+ return true
}
if Eqtype(l.Type, rt) {
- return 0
+ return false
}
- return 1
+ return true
}
func ascompatet(op int, nl *NodeList, nr **Type, fp int, init **NodeList) *NodeList {
@@ -1765,7 +1763,7 @@
// any lv that causes a fn call must be
// deferred until all the return arguments
// have been pulled from the output arguments
- if fncall(l, r.Type) != 0 {
+ if fncall(l, r.Type) {
tmp = temp(r.Type)
typecheck(&tmp, Erv)
a = Nod(OAS, l, tmp)
@@ -1916,7 +1914,7 @@
// f(g()) where g has multiple return values
if r != nil && lr.Next == nil && r.Type.Etype == TSTRUCT && r.Type.Funarg != 0 {
// optimization - can do block copy
- if eqtypenoname(r.Type, *nl) != 0 {
+ if eqtypenoname(r.Type, *nl) {
a = nodarg(*nl, fp)
r = Nod(OCONVNOP, r, nil)
r.Type = a.Type
@@ -2013,7 +2011,7 @@
var all *NodeList
var on *Node
var t *Type
- var notfirst int
+ var notfirst bool
var et int
var op int
var calls *NodeList
@@ -2021,7 +2019,7 @@
op = int(nn.Op)
all = nn.List
calls = nil
- notfirst = 0
+ notfirst = false
// Hoist all the argument evaluation up before the lock.
walkexprlistcheap(all, init)
@@ -2029,11 +2027,11 @@
calls = list(calls, mkcall("printlock", nil, init))
for l = all; l != nil; l = l.Next {
- if notfirst != 0 {
+ if notfirst {
calls = list(calls, mkcall("printsp", nil, init))
}
- notfirst = bool2int(op == OPRINTN)
+ notfirst = op == OPRINTN
n = l.N
if n.Op == OLITERAL {
@@ -2060,8 +2058,8 @@
t = n.Type
et = int(n.Type.Etype)
- if Isinter(n.Type) != 0 {
- if isnilinter(n.Type) != 0 {
+ if Isinter(n.Type) {
+ if isnilinter(n.Type) {
on = syslook("printeface", 1)
} else {
on = syslook("printiface", 1)
@@ -2070,7 +2068,7 @@
} else if Isptr[et] != 0 || et == TCHAN || et == TMAP || et == TFUNC || et == TUNSAFEPTR {
on = syslook("printpointer", 1)
argtype(on, n.Type) // any-1
- } else if Isslice(n.Type) != 0 {
+ } else if Isslice(n.Type) {
on = syslook("printslice", 1)
argtype(on, n.Type) // any-1
} else if Isint[et] != 0 {
@@ -2139,7 +2137,7 @@
return mkcall1(fn, Ptrto(t), nil, typename(t))
}
-func isstack(n *Node) int {
+func isstack(n *Node) bool {
var defn *Node
n = outervalue(n)
@@ -2156,81 +2154,81 @@
switch n.Op {
// OINDREG only ends up in walk if it's indirect of SP.
case OINDREG:
- return 1
+ return true
case ONAME:
switch n.Class {
case PAUTO,
PPARAM,
PPARAMOUT:
- return 1
+ return true
}
}
- return 0
+ return false
}
-func isglobal(n *Node) int {
+func isglobal(n *Node) bool {
n = outervalue(n)
switch n.Op {
case ONAME:
switch n.Class {
case PEXTERN:
- return 1
+ return true
}
}
- return 0
+ return false
}
// Do we need a write barrier for the assignment l = r?
-func needwritebarrier(l *Node, r *Node) int {
- if !(use_writebarrier != 0) {
- return 0
+func needwritebarrier(l *Node, r *Node) bool {
+ if use_writebarrier == 0 {
+ return false
}
if l == nil || isblank(l) {
- return 0
+ return false
}
// No write barrier for write of non-pointers.
dowidth(l.Type)
if !haspointers(l.Type) {
- return 0
+ return false
}
// No write barrier for write to stack.
- if isstack(l) != 0 {
- return 0
+ if isstack(l) {
+ return false
}
// No write barrier for implicit or explicit zeroing.
- if r == nil || iszero(r) != 0 {
- return 0
+ if r == nil || iszero(r) {
+ return false
}
// No write barrier for initialization to constant.
if r.Op == OLITERAL {
- return 0
+ return false
}
// No write barrier for storing static (read-only) data.
if r.Op == ONAME && strings.HasPrefix(r.Sym.Name, "statictmp_") {
- return 0
+ return false
}
// No write barrier for storing address of stack values,
// which are guaranteed only to be written to the stack.
- if r.Op == OADDR && isstack(r.Left) != 0 {
- return 0
+ if r.Op == OADDR && isstack(r.Left) {
+ return false
}
// No write barrier for storing address of global, which
// is live no matter what.
- if r.Op == OADDR && isglobal(r.Left) != 0 {
- return 0
+ if r.Op == OADDR && isglobal(r.Left) {
+ return false
}
// No write barrier for reslice: x = x[0:y] or x = append(x, ...).
@@ -2253,11 +2251,11 @@
Dump("bad reslice-r", r)
}
- return 0
+ return false
}
// Otherwise, be conservative and use write barrier.
- return 1
+ return true
}
// TODO(rsc): Perhaps componentgen should run before this.
@@ -2271,7 +2269,7 @@
var x int64
var name string
- if n.Left != nil && n.Right != nil && needwritebarrier(n.Left, n.Right) != 0 {
+ if n.Left != nil && n.Right != nil && needwritebarrier(n.Left, n.Right) {
if Curfn != nil && Curfn.Nowritebarrier {
Yyerror("write barrier prohibited")
}
@@ -2282,9 +2280,9 @@
n = mkcall1(writebarrierfn("writebarrierptr", t, n.Right.Type), nil, init, l, n.Right)
} else if t.Etype == TSTRING {
n = mkcall1(writebarrierfn("writebarrierstring", t, n.Right.Type), nil, init, l, n.Right)
- } else if Isslice(t) != 0 {
+ } else if Isslice(t) {
n = mkcall1(writebarrierfn("writebarrierslice", t, n.Right.Type), nil, init, l, n.Right)
- } else if Isinter(t) != 0 {
+ } else if Isinter(t) {
n = mkcall1(writebarrierfn("writebarrieriface", t, n.Right.Type), nil, init, l, n.Right)
} else if t.Width <= int64(4*Widthptr) {
x = 0
@@ -2303,7 +2301,6 @@
switch t.Width / int64(Widthptr) {
default:
Fatal("found writebarrierfat for %d-byte object of type %v", int(t.Width), Tconv(t, 0))
- fallthrough
case 2:
name = fmt.Sprintf("writebarrierfat%d%d", bvget(applywritebarrier_bv, PtrBit), bvget(applywritebarrier_bv, obj.BitsPerPointer+PtrBit))
@@ -2488,7 +2485,7 @@
continue
}
- if l.Op == OINDEX && Isfixedarray(l.Left.Type) != 0 {
+ if l.Op == OINDEX && Isfixedarray(l.Left.Type) {
reorder3save(&l.Right, all, list, &early)
l = l.Left
continue
@@ -2500,7 +2497,6 @@
switch l.Op {
default:
Fatal("reorder3 unexpected lvalue %v", Oconv(int(l.Op), obj.FmtSharp))
- fallthrough
case ONAME:
break
@@ -2537,7 +2533,7 @@
var q *Node
n = *np
- if !(aliased(n, all, stop) != 0) {
+ if !aliased(n, all, stop) {
return
}
@@ -2562,7 +2558,7 @@
continue
}
- if n.Op == OINDEX && Isfixedarray(n.Left.Type) != 0 {
+ if n.Op == OINDEX && Isfixedarray(n.Left.Type) {
n = n.Left
continue
}
@@ -2577,14 +2573,14 @@
* Is it possible that the computation of n might be
* affected by writes in as up to but not including stop?
*/
-func aliased(n *Node, all *NodeList, stop *NodeList) int {
+func aliased(n *Node, all *NodeList, stop *NodeList) bool {
var memwrite int
var varwrite int
var a *Node
var l *NodeList
if n == nil {
- return 0
+ return false
}
// Look for obvious aliasing: a variable being assigned
@@ -2615,9 +2611,9 @@
continue
}
- if vmatch2(a, n) != 0 {
+ if vmatch2(a, n) {
// Direct hit.
- return 1
+ return true
}
}
}
@@ -2627,20 +2623,20 @@
// that are being written.
// If no computed addresses are affected by the writes, no aliasing.
- if !(memwrite != 0) && !(varwrite != 0) {
- return 0
+ if memwrite == 0 && varwrite == 0 {
+ return false
}
// If n does not refer to computed addresses
// (that is, if n only refers to variables whose addresses
// have not been taken), no aliasing.
- if varexpr(n) != 0 {
- return 0
+ if varexpr(n) {
+ return false
}
// Otherwise, both the writes and n refer to computed memory addresses.
// Assume that they might conflict.
- return 1
+ return true
}
/*
@@ -2648,26 +2644,26 @@
* whose addresses have not been taken?
* (and no other memory)
*/
-func varexpr(n *Node) int {
+func varexpr(n *Node) bool {
if n == nil {
- return 1
+ return true
}
switch n.Op {
case OLITERAL:
- return 1
+ return true
case ONAME:
switch n.Class {
case PAUTO,
PPARAM,
PPARAMOUT:
- if !(n.Addrtaken != 0) {
- return 1
+ if n.Addrtaken == 0 {
+ return true
}
}
- return 0
+ return false
case OADD,
OSUB,
@@ -2691,57 +2687,57 @@
OCONVNOP,
OCONVIFACE,
ODOTTYPE:
- return bool2int(varexpr(n.Left) != 0 && varexpr(n.Right) != 0)
+ return varexpr(n.Left) && varexpr(n.Right)
}
// Be conservative.
- return 0
+ return false
}
/*
* is the name l mentioned in r?
*/
-func vmatch2(l *Node, r *Node) int {
+func vmatch2(l *Node, r *Node) bool {
var ll *NodeList
if r == nil {
- return 0
+ return false
}
switch r.Op {
// match each right given left
case ONAME:
- return bool2int(l == r)
+ return l == r
case OLITERAL:
- return 0
+ return false
}
- if vmatch2(l, r.Left) != 0 {
- return 1
+ if vmatch2(l, r.Left) {
+ return true
}
- if vmatch2(l, r.Right) != 0 {
- return 1
+ if vmatch2(l, r.Right) {
+ return true
}
for ll = r.List; ll != nil; ll = ll.Next {
- if vmatch2(l, ll.N) != 0 {
- return 1
+ if vmatch2(l, ll.N) {
+ return true
}
}
- return 0
+ return false
}
/*
* is any name mentioned in l also mentioned in r?
* called by sinit.c
*/
-func vmatch1(l *Node, r *Node) int {
+func vmatch1(l *Node, r *Node) bool {
var ll *NodeList
/*
* isolate all left sides
*/
if l == nil || r == nil {
- return 0
+ return false
}
switch l.Op {
case ONAME:
@@ -2755,28 +2751,28 @@
// must be delayed if right has function calls.
default:
if r.Ullman >= UINF {
- return 1
+ return true
}
}
return vmatch2(l, r)
case OLITERAL:
- return 0
+ return false
}
- if vmatch1(l.Left, r) != 0 {
- return 1
+ if vmatch1(l.Left, r) {
+ return true
}
- if vmatch1(l.Right, r) != 0 {
- return 1
+ if vmatch1(l.Right, r) {
+ return true
}
for ll = l.List; ll != nil; ll = ll.Next {
- if vmatch1(ll.N, r) != 0 {
- return 1
+ if vmatch1(ll.N, r) {
+ return true
}
}
- return 0
+ return false
}
/*
@@ -2807,7 +2803,7 @@
nn = list(nn, Nod(OAS, nodarg(t, 1), nil))
}
- if v == nil || !(v.Class&PHEAP != 0) {
+ if v == nil || v.Class&PHEAP == 0 {
continue
}
@@ -3131,7 +3127,7 @@
// memmove(&s[len(l1)], &l2[0], len(l2)*sizeof(T))
nptr1 = Nod(OINDEX, s, Nod(OLEN, l1, nil))
- nptr1.Bounded = 1
+ nptr1.Bounded = true
nptr1 = Nod(OADDR, nptr1, nil)
nptr2 = Nod(OSPTR, l2, nil)
@@ -3198,7 +3194,7 @@
nsrc = n.List.N
// Resolve slice type of multi-valued return.
- if Istype(nsrc.Type, TSTRUCT) != 0 {
+ if Istype(nsrc.Type, TSTRUCT) {
nsrc.Type = nsrc.Type.Type.Type
}
argc = count(n.List) - 1
@@ -3232,7 +3228,7 @@
for a = n.List.Next; a != nil; a = a.Next {
nx = Nod(OINDEX, ns, nn) // s[n] ...
- nx.Bounded = 1
+ nx.Bounded = true
l = list(l, Nod(OAS, nx, a.N)) // s[n] = arg
if a.Next != nil {
l = list(l, Nod(OAS, nn, Nod(OADD, nn, Nodintconst(1)))) // n = n + 1
@@ -3326,7 +3322,7 @@
//
func sliceany(n *Node, init **NodeList) *Node {
var bounded int
- var slice3 int
+ var slice3 bool
var src *Node
var lb *Node
var hb *Node
@@ -3348,8 +3344,8 @@
src = n.Left
lb = n.Right.Left
- slice3 = bool2int(n.Op == OSLICE3 || n.Op == OSLICE3ARR)
- if slice3 != 0 {
+ slice3 = n.Op == OSLICE3 || n.Op == OSLICE3ARR
+ if slice3 {
hb = n.Right.Right.Left
cb = n.Right.Right.Right
} else {
@@ -3371,29 +3367,29 @@
// static checks if possible
bv = 1 << 50
- if Isconst(bound, CTINT) != 0 {
- if !(Smallintconst(bound) != 0) {
+ if Isconst(bound, CTINT) {
+ if !Smallintconst(bound) {
Yyerror("array len too large")
} else {
bv = Mpgetfix(bound.Val.U.Xval)
}
}
- if Isconst(cb, CTINT) != 0 {
+ if Isconst(cb, CTINT) {
cbv = Mpgetfix(cb.Val.U.Xval)
if cbv < 0 || cbv > bv {
Yyerror("slice index out of bounds")
}
}
- if Isconst(hb, CTINT) != 0 {
+ if Isconst(hb, CTINT) {
hbv = Mpgetfix(hb.Val.U.Xval)
if hbv < 0 || hbv > bv {
Yyerror("slice index out of bounds")
}
}
- if Isconst(lb, CTINT) != 0 {
+ if Isconst(lb, CTINT) {
lbv = Mpgetfix(lb.Val.U.Xval)
if lbv < 0 || lbv > bv {
Yyerror("slice index out of bounds")
@@ -3430,24 +3426,24 @@
if cb != nil {
cb = cheapexpr(conv(cb, bt), init)
- if !(bounded != 0) {
+ if bounded == 0 {
chk0 = Nod(OLT, bound, cb)
}
- } else if slice3 != 0 {
+ } else if slice3 {
// When we figure out what this means, implement it.
Fatal("slice3 with cb == N") // rejected by parser
}
if hb != nil {
hb = cheapexpr(conv(hb, bt), init)
- if !(bounded != 0) {
+ if bounded == 0 {
if cb != nil {
chk1 = Nod(OLT, cb, hb)
} else {
chk1 = Nod(OLT, bound, hb)
}
}
- } else if slice3 != 0 {
+ } else if slice3 {
// When we figure out what this means, implement it.
Fatal("slice3 with hb == N") // rejected by parser
} else if n.Op == OSLICEARR {
@@ -3461,7 +3457,7 @@
if lb != nil {
lb = cheapexpr(conv(lb, bt), init)
- if !(bounded != 0) {
+ if bounded == 0 {
chk2 = Nod(OLT, hb, lb)
}
}
@@ -3501,7 +3497,7 @@
n.Right = nil
n.List = nil
- if !(slice3 != 0) {
+ if !slice3 {
cb = bound
}
if lb == nil {
@@ -3623,10 +3619,10 @@
l = nil
r = nil
- if Isinter(n.Left.Type) != 0 && !(Isinter(n.Right.Type) != 0) {
+ if Isinter(n.Left.Type) && !Isinter(n.Right.Type) {
l = n.Left
r = n.Right
- } else if !(Isinter(n.Left.Type) != 0) && Isinter(n.Right.Type) != 0 {
+ } else if !Isinter(n.Left.Type) && Isinter(n.Right.Type) {
l = n.Right
r = n.Left
}
@@ -3667,7 +3663,7 @@
return
case TARRAY:
- if Isslice(t) != 0 {
+ if Isslice(t) {
return
}
@@ -3684,7 +3680,7 @@
cmpr = cmpr.Left
}
- if !(islvalue(cmpl) != 0) || !(islvalue(cmpr) != 0) {
+ if !islvalue(cmpl) || !islvalue(cmpr) {
Fatal("arguments of comparison must be lvalues - %v %v", Nconv(cmpl, 0), Nconv(cmpr, 0))
}
@@ -3721,7 +3717,7 @@
}
if expr == nil {
- expr = Nodbool(bool2int(n.Op == OEQ))
+ expr = Nodbool(n.Op == OEQ)
}
r = expr
goto ret
@@ -3745,7 +3741,7 @@
}
if expr == nil {
- expr = Nodbool(bool2int(n.Op == OEQ))
+ expr = Nodbool(n.Op == OEQ)
}
r = expr
goto ret
@@ -3778,30 +3774,30 @@
return
}
-func samecheap(a *Node, b *Node) int {
+func samecheap(a *Node, b *Node) bool {
var ar *Node
var br *Node
for a != nil && b != nil && a.Op == b.Op {
switch a.Op {
default:
- return 0
+ return false
case ONAME:
- return bool2int(a == b)
+ return a == b
case ODOT,
ODOTPTR:
ar = a.Right
br = b.Right
if ar.Op != ONAME || br.Op != ONAME || ar.Sym != br.Sym {
- return 0
+ return false
}
case OINDEX:
ar = a.Right
br = b.Right
- if !(Isconst(ar, CTINT) != 0) || !(Isconst(br, CTINT) != 0) || Mpcmpfixfix(ar.Val.U.Xval, br.Val.U.Xval) != 0 {
- return 0
+ if !Isconst(ar, CTINT) || !Isconst(br, CTINT) || Mpcmpfixfix(ar.Val.U.Xval, br.Val.U.Xval) != 0 {
+ return false
}
}
@@ -3809,7 +3805,7 @@
b = b.Left
}
- return 0
+ return false
}
func walkrotate(np **Node) {
@@ -3836,14 +3832,14 @@
}
// Want same, side effect-free expression on lhs of both shifts.
- if !(samecheap(l.Left, r.Left) != 0) {
+ if !samecheap(l.Left, r.Left) {
return
}
// Constants adding to width?
w = int(l.Type.Width * 8)
- if Smallintconst(l.Right) != 0 && Smallintconst(r.Right) != 0 {
+ if Smallintconst(l.Right) && Smallintconst(r.Right) {
sl = int(Mpgetfix(l.Right.Val.U.Xval))
if sl >= 0 {
sr = int(Mpgetfix(r.Right.Val.U.Xval))
@@ -3889,7 +3885,7 @@
var w int
n = *np
- if !(Isint[n.Type.Etype] != 0) {
+ if Isint[n.Type.Etype] == 0 {
return
}
@@ -4240,46 +4236,46 @@
}
// return 1 if integer n must be in range [0, max), 0 otherwise
-func bounded(n *Node, max int64) int {
+func bounded(n *Node, max int64) bool {
var v int64
var bits int32
var sign int
- if n.Type == nil || !(Isint[n.Type.Etype] != 0) {
- return 0
+ if n.Type == nil || Isint[n.Type.Etype] == 0 {
+ return false
}
sign = int(Issigned[n.Type.Etype])
bits = int32(8 * n.Type.Width)
- if Smallintconst(n) != 0 {
+ if Smallintconst(n) {
v = Mpgetfix(n.Val.U.Xval)
- return bool2int(0 <= v && v < max)
+ return 0 <= v && v < max
}
switch n.Op {
case OAND:
v = -1
- if Smallintconst(n.Left) != 0 {
+ if Smallintconst(n.Left) {
v = Mpgetfix(n.Left.Val.U.Xval)
- } else if Smallintconst(n.Right) != 0 {
+ } else if Smallintconst(n.Right) {
v = Mpgetfix(n.Right.Val.U.Xval)
}
if 0 <= v && v < max {
- return 1
+ return true
}
case OMOD:
- if !(sign != 0) && Smallintconst(n.Right) != 0 {
+ if sign == 0 && Smallintconst(n.Right) {
v = Mpgetfix(n.Right.Val.U.Xval)
if 0 <= v && v <= max {
- return 1
+ return true
}
}
case ODIV:
- if !(sign != 0) && Smallintconst(n.Right) != 0 {
+ if sign == 0 && Smallintconst(n.Right) {
v = Mpgetfix(n.Right.Val.U.Xval)
for bits > 0 && v >= 2 {
bits--
@@ -4288,34 +4284,33 @@
}
case ORSH:
- if !(sign != 0) && Smallintconst(n.Right) != 0 {
+ if sign == 0 && Smallintconst(n.Right) {
v = Mpgetfix(n.Right.Val.U.Xval)
if v > int64(bits) {
- return 1
+ return true
}
bits -= int32(v)
}
}
- if !(sign != 0) && bits <= 62 && 1<<uint(bits) <= max {
- return 1
+ if sign == 0 && bits <= 62 && 1<<uint(bits) <= max {
+ return true
}
- return 0
+ return false
}
func usefield(n *Node) {
var field *Type
var l *Type
- if !(obj.Fieldtrack_enabled != 0) {
+ if obj.Fieldtrack_enabled == 0 {
return
}
switch n.Op {
default:
Fatal("usefield %v", Oconv(int(n.Op), 0))
- fallthrough
case ODOT,
ODOTPTR:
@@ -4352,23 +4347,23 @@
Curfn.Paramfld = l
}
-func candiscardlist(l *NodeList) int {
+func candiscardlist(l *NodeList) bool {
for ; l != nil; l = l.Next {
- if !(candiscard(l.N) != 0) {
- return 0
+ if !candiscard(l.N) {
+ return false
}
}
- return 1
+ return true
}
-func candiscard(n *Node) int {
+func candiscard(n *Node) bool {
if n == nil {
- return 1
+ return true
}
switch n.Op {
default:
- return 0
+ return false
// Discardable as long as the subpieces are.
case ONAME,
@@ -4428,32 +4423,32 @@
// Discardable as long as we know it's not division by zero.
case ODIV,
OMOD:
- if Isconst(n.Right, CTINT) != 0 && mpcmpfixc(n.Right.Val.U.Xval, 0) != 0 {
+ if Isconst(n.Right, CTINT) && mpcmpfixc(n.Right.Val.U.Xval, 0) != 0 {
break
}
- if Isconst(n.Right, CTFLT) != 0 && mpcmpfltc(n.Right.Val.U.Fval, 0) != 0 {
+ if Isconst(n.Right, CTFLT) && mpcmpfltc(n.Right.Val.U.Fval, 0) != 0 {
break
}
- return 0
+ return false
// Discardable as long as we know it won't fail because of a bad size.
case OMAKECHAN,
OMAKEMAP:
- if Isconst(n.Left, CTINT) != 0 && mpcmpfixc(n.Left.Val.U.Xval, 0) == 0 {
+ if Isconst(n.Left, CTINT) && mpcmpfixc(n.Left.Val.U.Xval, 0) == 0 {
break
}
- return 0
+ return false
// Difficult to tell what sizes are okay.
case OMAKESLICE:
- return 0
+ return false
}
- if !(candiscard(n.Left) != 0) || !(candiscard(n.Right) != 0) || !(candiscard(n.Ntest) != 0) || !(candiscard(n.Nincr) != 0) || !(candiscardlist(n.Ninit) != 0) || !(candiscardlist(n.Nbody) != 0) || !(candiscardlist(n.Nelse) != 0) || !(candiscardlist(n.List) != 0) || !(candiscardlist(n.Rlist) != 0) {
- return 0
+ if !candiscard(n.Left) || !candiscard(n.Right) || !candiscard(n.Ntest) || !candiscard(n.Nincr) || !candiscardlist(n.Ninit) || !candiscardlist(n.Nbody) || !candiscardlist(n.Nelse) || !candiscardlist(n.List) || !candiscardlist(n.Rlist) {
+ return false
}
- return 1
+ return true
}
// rewrite
diff --git a/src/cmd/internal/gc/y.go b/src/cmd/internal/gc/y.go
index 0e9157c..5b79856 100644
--- a/src/cmd/internal/gc/y.go
+++ b/src/cmd/internal/gc/y.go
@@ -851,6 +851,7 @@
}
type yyParser interface {
+ Parse(yyLexer) int
Lookahead() int
}
@@ -862,6 +863,13 @@
return p.lookahead()
}
+func yyNewParser() yyParser {
+ p := &yyParserImpl{
+ lookahead: func() int { return -1 },
+ }
+ return p
+}
+
const yyFlag = -1000
func yyTokname(c int) string {
@@ -919,6 +927,10 @@
}
func yyParse(yylex yyLexer) int {
+ return yyNewParser().Parse(yylex)
+}
+
+func (yyrcvr *yyParserImpl) Parse(yylex yyLexer) int {
var yyn int
var yylval yySymType
var yyVAL yySymType
@@ -930,19 +942,12 @@
yystate := 0
yychar := -1
yytoken := -1 // yychar translated into internal numbering
- if lx, ok := yylex.(interface {
- SetParser(yyParser)
- }); ok {
- p := &yyParserImpl{
- lookahead: func() int { return yychar },
- }
- lx.SetParser(p)
- defer func() {
- // Make sure we report no lookahead when not parsing.
- yychar = -1
- yytoken = -1
- }()
- }
+ yyrcvr.lookahead = func() int { return yychar }
+ defer func() {
+ // Make sure we report no lookahead when not parsing.
+ yychar = -1
+ yytoken = -1
+ }()
yyp := -1
goto yystack