From: Matthew Dempsky Date: Wed, 30 Mar 2016 22:09:25 +0000 (-0700) Subject: cmd/compile: use t.IsFoo() instead of Isfoo[t.Etype] X-Git-Tag: go1.7beta1~1001 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=e76fc1b921e421bcbed66194946ecca8d49f8aac;p=gostls13.git cmd/compile: use t.IsFoo() instead of Isfoo[t.Etype] This allows us to get rid of Isptr and Issigned. Still some code to clean up for Isint, Isfloat, and Iscomplex. CL produced mechanically using gofmt -w -r. Passes toolstash -cmp. Change-Id: If4f807bb7f2b357288d2547be2380eb511875786 Reviewed-on: https://go-review.googlesource.com/21339 Run-TryBot: Matthew Dempsky Reviewed-by: Brad Fitzpatrick Reviewed-by: Josh Bleecher Snyder --- diff --git a/src/cmd/compile/internal/amd64/ggen.go b/src/cmd/compile/internal/amd64/ggen.go index 0ca802b058..d65d128edd 100644 --- a/src/cmd/compile/internal/amd64/ggen.go +++ b/src/cmd/compile/internal/amd64/ggen.go @@ -204,7 +204,7 @@ func dodiv(op gc.Op, nl *gc.Node, nr *gc.Node, res *gc.Node) { t0 := t check := false - if gc.Issigned[t.Etype] { + if t.IsSigned() { check = true if gc.Isconst(nl, gc.CTINT) && nl.Int() != -(1<= uint64(nl.Type.Width*8) { - if op == gc.ORSH && gc.Issigned[nl.Type.Etype] { + if op == gc.ORSH && nl.Type.IsSigned() { gshift(arm.AMOVW, &n1, arm.SHIFT_AR, int32(w), &n1) } else { gins(arm.AEOR, &n1, &n1) } } else { - if op == gc.ORSH && gc.Issigned[nl.Type.Etype] { + if op == gc.ORSH && nl.Type.IsSigned() { gshift(arm.AMOVW, &n1, arm.SHIFT_AR, int32(sc), &n1) } else if op == gc.ORSH { gshift(arm.AMOVW, &n1, arm.SHIFT_LR, int32(sc), &n1) // OLSH @@ -294,7 +294,7 @@ func cgen_shift(op gc.Op, bounded bool, nl *gc.Node, nr *gc.Node, res *gc.Node) if op == gc.ORSH { var p1 *obj.Prog var p2 *obj.Prog - if gc.Issigned[nl.Type.Etype] { + if nl.Type.IsSigned() { p1 = gshift(arm.AMOVW, &n2, arm.SHIFT_AR, int32(w)-1, &n2) p2 = gregshift(arm.AMOVW, &n2, arm.SHIFT_AR, &n1, &n2) } else { @@ -475,7 +475,7 @@ func ginscon(as obj.As, c int64, n *gc.Node) { } func ginscmp(op gc.Op, t *gc.Type, n1, n2 *gc.Node, likely int) *obj.Prog { - if gc.Isint[t.Etype] && n1.Op == gc.OLITERAL && n1.Int() == 0 && n2.Op != gc.OLITERAL { + if t.IsInteger() && n1.Op == gc.OLITERAL && n1.Int() == 0 && n2.Op != gc.OLITERAL { op = gc.Brrev(op) n1, n2 = n2, n1 } @@ -484,7 +484,7 @@ func ginscmp(op gc.Op, t *gc.Type, n1, n2 *gc.Node, likely int) *obj.Prog { gc.Regalloc(&g1, n1.Type, &r1) gc.Cgen(n1, &g1) gmove(&g1, &r1) - if gc.Isint[t.Etype] && n2.Op == gc.OLITERAL && n2.Int() == 0 { + if t.IsInteger() && n2.Op == gc.OLITERAL && n2.Int() == 0 { gins(arm.ACMP, &r1, n2) } else { gc.Regalloc(&r2, t, n2) diff --git a/src/cmd/compile/internal/arm64/ggen.go b/src/cmd/compile/internal/arm64/ggen.go index f998bd6757..3b7a422e5c 100644 --- a/src/cmd/compile/internal/arm64/ggen.go +++ b/src/cmd/compile/internal/arm64/ggen.go @@ -149,7 +149,7 @@ func dodiv(op gc.Op, nl *gc.Node, nr *gc.Node, res *gc.Node) { t0 := t check := false - if gc.Issigned[t.Etype] { + if t.IsSigned() { check = true if gc.Isconst(nl, gc.CTINT) && nl.Int() != -(1< int64(Widthptr) || Is64(nl.Type) || Isfloat[nl.Type.Etype] { + if n.Type.Width > int64(Widthptr) || Is64(nl.Type) || nl.Type.IsFloat() { Tempname(&n1, nl.Type) } else { Regalloc(&n1, nl.Type, res) } Cgen(nl, &n1) } - if n.Type.Width > int64(Widthptr) || Is64(n.Type) || Isfloat[n.Type.Etype] { + if n.Type.Width > int64(Widthptr) || Is64(n.Type) || n.Type.IsFloat() { Tempname(&n2, n.Type) } else { Regalloc(&n2, n.Type, nil) @@ -653,7 +653,7 @@ func cgen_wb(n, res *Node, wb bool) { cgen_callret(n, res) case OMOD, ODIV: - if Isfloat[n.Type.Etype] || Thearch.Dodiv == nil { + if n.Type.IsFloat() || Thearch.Dodiv == nil { a = Thearch.Optoas(n.Op, nl.Type) goto abop } @@ -904,7 +904,7 @@ func Mgen(n *Node, n1 *Node, rg *Node) { Tempname(n1, n.Type) Cgen(n, n1) - if n.Type.Width <= int64(Widthptr) || Isfloat[n.Type.Etype] { + if n.Type.Width <= int64(Widthptr) || n.Type.IsFloat() { n2 := *n1 Regalloc(n1, n.Type, rg) Thearch.Gmove(&n2, n1) @@ -1215,7 +1215,7 @@ func Agenr(n *Node, a *Node, res *Node) { // i is in register n1, extend to 32 bits. t := Types[TUINT32] - if Issigned[n1.Type.Etype] { + if n1.Type.IsSigned() { t = Types[TINT32] } @@ -1395,7 +1395,7 @@ func Agenr(n *Node, a *Node, res *Node) { // type of the index t := Types[TUINT64] - if Issigned[n1.Type.Etype] { + if n1.Type.IsSigned() { t = Types[TINT64] } @@ -1690,10 +1690,10 @@ func Igen(n *Node, a *Node, res *Node) { // Could do the same for slice except that we need // to use the real index for the bounds checking. case OINDEX: - if n.Left.Type.IsArray() || (Isptr[n.Left.Type.Etype] && n.Left.Left.Type.IsArray()) { + if n.Left.Type.IsArray() || (n.Left.Type.IsPtr() && n.Left.Left.Type.IsArray()) { if Isconst(n.Right, CTINT) { // Compute &a. - if !Isptr[n.Left.Type.Etype] { + if !n.Left.Type.IsPtr() { Igen(n.Left, a, res) } else { var n1 Node @@ -1798,7 +1798,7 @@ func bgenx(n, res *Node, wantTrue bool, likely int, to *obj.Prog) { Genlist(n.Ninit) } - if Thearch.Bgen_float != nil && n.Left != nil && Isfloat[n.Left.Type.Etype] { + if Thearch.Bgen_float != nil && n.Left != nil && n.Left.Type.IsFloat() { if genval { bvgenjump(n, res, wantTrue, false) return @@ -1916,7 +1916,7 @@ func bgenx(n, res *Node, wantTrue bool, likely int, to *obj.Prog) { op := n.Op if !wantTrue { - if Isfloat[nr.Type.Etype] { + if nr.Type.IsFloat() { // Brcom is not valid on floats when NaN is involved. ll := n.Ninit // avoid re-genning Ninit n.Ninit.Set(nil) @@ -1972,7 +1972,7 @@ func bgenx(n, res *Node, wantTrue bool, likely int, to *obj.Prog) { return } - if Iscomplex[nl.Type.Etype] { + if nl.Type.IsComplex() { complexbool(op, nl, nr, res, wantTrue, likely, to) return } @@ -2044,7 +2044,7 @@ func bgenx(n, res *Node, wantTrue bool, likely int, to *obj.Prog) { l, r := nl, nr // On x86, only < and <= work right with NaN; reverse if needed - if Ctxt.Arch.Thechar == '6' && Isfloat[nl.Type.Etype] && (op == OGT || op == OGE) { + if Ctxt.Arch.Thechar == '6' && nl.Type.IsFloat() && (op == OGT || op == OGE) { l, r = r, l op = Brrev(op) } @@ -2061,7 +2061,7 @@ func bgenx(n, res *Node, wantTrue bool, likely int, to *obj.Prog) { // Handle floating point special cases. // Note that 8g has Bgen_float and is handled above. - if Isfloat[nl.Type.Etype] { + if nl.Type.IsFloat() { switch Ctxt.Arch.Thechar { case '5': if genval { @@ -2195,7 +2195,7 @@ func stkof(n *Node) int64 { case ODOT: t := n.Left.Type - if Isptr[t.Etype] { + if t.IsPtr() { break } off := stkof(n.Left) @@ -2220,7 +2220,7 @@ func stkof(n *Node) int64 { case OCALLMETH, OCALLINTER, OCALLFUNC: t := n.Left.Type - if Isptr[t.Etype] { + if t.IsPtr() { t = t.Elem() } @@ -2575,7 +2575,7 @@ func cgen_callret(n *Node, res *Node) { // res = &return value from call. func cgen_aret(n *Node, res *Node) { t := n.Left.Type - if Isptr[t.Etype] { + if t.IsPtr() { t = t.Elem() } diff --git a/src/cmd/compile/internal/gc/closure.go b/src/cmd/compile/internal/gc/closure.go index 738a83a4d3..1c5c5eb1a2 100644 --- a/src/cmd/compile/internal/gc/closure.go +++ b/src/cmd/compile/internal/gc/closure.go @@ -489,7 +489,7 @@ func makepartialcall(fn *Node, t0 *Type, meth *Sym) *Node { p = fmt.Sprintf("(%v).(%v)-fm", Tconv(rcvrtype, FmtLeft|FmtShort), Sconv(meth, FmtLeft)) } basetype := rcvrtype - if Isptr[rcvrtype.Etype] { + if rcvrtype.IsPtr() { basetype = basetype.Elem() } if !basetype.IsInterface() && basetype.Sym == nil { @@ -582,7 +582,7 @@ func makepartialcall(fn *Node, t0 *Type, meth *Sym) *Node { ptr.Xoffset = 0 xfunc.Func.Dcl = append(xfunc.Func.Dcl, ptr) var body []*Node - if Isptr[rcvrtype.Etype] || rcvrtype.IsInterface() { + if rcvrtype.IsPtr() || rcvrtype.IsInterface() { ptr.Name.Param.Ntype = typenod(rcvrtype) body = append(body, Nod(OAS, ptr, cv)) } else { diff --git a/src/cmd/compile/internal/gc/const.go b/src/cmd/compile/internal/gc/const.go index e93c3f9dc6..af75580cbb 100644 --- a/src/cmd/compile/internal/gc/const.go +++ b/src/cmd/compile/internal/gc/const.go @@ -162,7 +162,7 @@ func convlit1(n *Node, t *Type, explicit bool, reuse canReuseNode) *Node { if t != nil && t.Etype == TIDEAL && n.Val().Ctype() != CTINT { n.SetVal(toint(n.Val())) } - if t != nil && !Isint[t.Etype] { + if t != nil && !t.IsInteger() { Yyerror("invalid operation: %v (shift of type %v)", n, t) t = nil } @@ -421,7 +421,7 @@ func toint(v Val) Val { func doesoverflow(v Val, t *Type) bool { switch v.Ctype() { case CTINT, CTRUNE: - if !Isint[t.Etype] { + if !t.IsInteger() { Fatalf("overflow: %v integer constant", t) } if v.U.(*Mpint).Cmp(Minintval[t.Etype]) < 0 || v.U.(*Mpint).Cmp(Maxintval[t.Etype]) > 0 { @@ -429,7 +429,7 @@ func doesoverflow(v Val, t *Type) bool { } case CTFLT: - if !Isfloat[t.Etype] { + if !t.IsFloat() { Fatalf("overflow: %v floating-point constant", t) } if v.U.(*Mpflt).Cmp(minfltval[t.Etype]) <= 0 || v.U.(*Mpflt).Cmp(maxfltval[t.Etype]) >= 0 { @@ -437,7 +437,7 @@ func doesoverflow(v Val, t *Type) bool { } case CTCPLX: - if !Iscomplex[t.Etype] { + if !t.IsComplex() { Fatalf("overflow: %v complex constant", t) } if v.U.(*Mpcplx).Real.Cmp(minfltval[t.Etype]) <= 0 || v.U.(*Mpcplx).Real.Cmp(maxfltval[t.Etype]) >= 0 || v.U.(*Mpcplx).Imag.Cmp(minfltval[t.Etype]) <= 0 || v.U.(*Mpcplx).Imag.Cmp(maxfltval[t.Etype]) >= 0 { @@ -773,7 +773,7 @@ func evconst(n *Node) { nr = defaultlit(nr, Types[TUINT]) n.Right = nr - if nr.Type != nil && (Issigned[nr.Type.Etype] || !Isint[nr.Type.Etype]) { + if nr.Type != nil && (nr.Type.IsSigned() || !nr.Type.IsInteger()) { goto illegal } if nl.Val().Ctype() != CTRUNE { @@ -1332,13 +1332,13 @@ num: // in the case of an untyped non-constant value, like 1<left == ll to clarify error message. n.Left = ll @@ -2910,7 +2910,7 @@ func typecheckcomplit(n *Node) *Node { nerr := nerrors n.Type = t - if Isptr[t.Etype] { + if t.IsPtr() { // 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 { @@ -3126,7 +3126,7 @@ func typecheckcomplit(n *Node) *Node { } n.Orig = norig - if Isptr[n.Type.Etype] { + if n.Type.IsPtr() { n = Nod(OPTRLIT, n, nil) n.Typecheck = 1 n.Type = n.Left.Type @@ -3534,7 +3534,7 @@ func copytype(n *Node, t *Type) { if embedlineno != 0 { lineno = embedlineno - if Isptr[t.Etype] { + if t.IsPtr() { Yyerror("embedded type cannot be a pointer") } } @@ -3814,7 +3814,7 @@ func checkmake(t *Type, arg string, n *Node) bool { } } - if !Isint[n.Type.Etype] && n.Type.Etype != TIDEAL { + if !n.Type.IsInteger() && n.Type.Etype != TIDEAL { Yyerror("non-integer %s argument in make(%v) - %v", arg, t, n.Type) return false } diff --git a/src/cmd/compile/internal/gc/universe.go b/src/cmd/compile/internal/gc/universe.go index 20c1c8c4d5..c2ba9c9a93 100644 --- a/src/cmd/compile/internal/gc/universe.go +++ b/src/cmd/compile/internal/gc/universe.go @@ -184,17 +184,8 @@ func typeinit() { Iscomplex[TCOMPLEX64] = true Iscomplex[TCOMPLEX128] = true - Isptr[TPTR32] = true - Isptr[TPTR64] = true - isforw[TFORW] = true - Issigned[TINT] = true - Issigned[TINT8] = true - Issigned[TINT16] = true - Issigned[TINT32] = true - Issigned[TINT64] = true - // initialize okfor for et := EType(0); et < NTYPE; et++ { if Isint[et] || et == TIDEAL { diff --git a/src/cmd/compile/internal/gc/walk.go b/src/cmd/compile/internal/gc/walk.go index 425128eb73..bab9c00300 100644 --- a/src/cmd/compile/internal/gc/walk.go +++ b/src/cmd/compile/internal/gc/walk.go @@ -541,7 +541,7 @@ opswitch: // delayed until now to preserve side effects. t := n.Left.Type - if Isptr[t.Etype] { + if t.IsPtr() { t = t.Elem() } if t.IsArray() { @@ -1057,7 +1057,7 @@ opswitch: case OCONV, OCONVNOP: if Thearch.Thechar == '5' { - if Isfloat[n.Left.Type.Etype] { + if n.Left.Type.IsFloat() { if n.Type.Etype == TINT64 { n = mkcall("float64toint64", n.Type, init, conv(n.Left, Types[TFLOAT64])) break @@ -1069,7 +1069,7 @@ opswitch: } } - if Isfloat[n.Type.Etype] { + if n.Type.IsFloat() { if n.Left.Type.Etype == TINT64 { n = mkcall("int64tofloat64", n.Type, init, conv(n.Left, Types[TINT64])) break @@ -1154,7 +1154,7 @@ opswitch: break } t := n.Left.Type - if t != nil && Isptr[t.Etype] { + if t != nil && t.IsPtr() { t = t.Elem() } if t.IsArray() { @@ -1930,7 +1930,7 @@ func walkprint(nn *Node, init *Nodes) *Node { on = syslook("printiface") } on = substArgTypes(on, n.Type) // any-1 - } else if Isptr[et] || et == TCHAN || et == TMAP || et == TFUNC || et == TUNSAFEPTR { + } else if n.Type.IsPtr() || et == TCHAN || et == TMAP || et == TFUNC || et == TUNSAFEPTR { on = syslook("printpointer") on = substArgTypes(on, n.Type) // any-1 } else if n.Type.IsSlice() { @@ -3277,7 +3277,7 @@ func walkrotate(n *Node) *Node { l := n.Left r := n.Right - if (n.Op != OOR && n.Op != OXOR) || (l.Op != OLSH && l.Op != ORSH) || (r.Op != OLSH && r.Op != ORSH) || n.Type == nil || Issigned[n.Type.Etype] || l.Op == r.Op { + if (n.Op != OOR && n.Op != OXOR) || (l.Op != OLSH && l.Op != ORSH) || (r.Op != OLSH && r.Op != ORSH) || n.Type == nil || n.Type.IsSigned() || l.Op == r.Op { return n } @@ -3322,7 +3322,7 @@ func walkrotate(n *Node) *Node { // The result of walkmul MUST be assigned back to n, e.g. // n.Left = walkmul(n.Left, init) func walkmul(n *Node, init *Nodes) *Node { - if !Isint[n.Type.Etype] { + if !n.Type.IsInteger() { return n } @@ -3434,7 +3434,7 @@ func walkdiv(n *Node, init *Nodes) *Node { var m Magic m.W = w - if Issigned[nl.Type.Etype] { + if nl.Type.IsSigned() { m.Sd = nr.Val().U.(*Mpint).Int64() Smagic(&m) } else { @@ -3555,7 +3555,7 @@ func walkdiv(n *Node, init *Nodes) *Node { } default: - if Issigned[n.Type.Etype] { + if n.Type.IsSigned() { if n.Op == OMOD { // signed modulo 2^pow is like ANDing // with the last pow bits, but if nl < 0, @@ -3652,11 +3652,11 @@ ret: // return 1 if integer n must be in range [0, max), 0 otherwise func bounded(n *Node, max int64) bool { - if n.Type == nil || !Isint[n.Type.Etype] { + if n.Type == nil || !n.Type.IsInteger() { return false } - sign := Issigned[n.Type.Etype] + sign := n.Type.IsSigned() bits := int32(8 * n.Type.Width) if Smallintconst(n) { @@ -3772,7 +3772,7 @@ func usefield(n *Node) { } t := n.Left.Type - if Isptr[t.Etype] { + if t.IsPtr() { t = t.Elem() } field := dotField[typeSym{t.Orig, n.Sym}] @@ -3784,7 +3784,7 @@ func usefield(n *Node) { } outer := n.Left.Type - if Isptr[outer.Etype] { + if outer.IsPtr() { outer = outer.Elem() } if outer.Sym == nil { diff --git a/src/cmd/compile/internal/mips64/ggen.go b/src/cmd/compile/internal/mips64/ggen.go index 849d11c899..004fef5f0d 100644 --- a/src/cmd/compile/internal/mips64/ggen.go +++ b/src/cmd/compile/internal/mips64/ggen.go @@ -138,7 +138,7 @@ func dodiv(op gc.Op, nl *gc.Node, nr *gc.Node, res *gc.Node) { t0 := t if t.Width < 8 { - if gc.Issigned[t.Etype] { + if t.IsSigned() { t = gc.Types[gc.TINT64] } else { t = gc.Types[gc.TUINT64] @@ -234,7 +234,7 @@ func cgen_hmul(nl *gc.Node, nr *gc.Node, res *gc.Node) { case gc.TINT64, gc.TUINT64: - if gc.Issigned[t.Etype] { + if t.IsSigned() { gins3(mips.AMULV, &n2, &n1, nil) } else { gins3(mips.AMULVU, &n2, &n1, nil) @@ -330,7 +330,7 @@ func cgen_shift(op gc.Op, bounded bool, nl *gc.Node, nr *gc.Node, res *gc.Node) gc.Nodconst(&n3, tcount, nl.Type.Width*8) gins3(mips.ASGTU, &n3, &n1, &rtmp) p1 := ginsbranch(mips.ABNE, nil, &rtmp, nil, 0) - if op == gc.ORSH && gc.Issigned[nl.Type.Etype] { + if op == gc.ORSH && nl.Type.IsSigned() { gc.Nodconst(&n3, gc.Types[gc.TUINT32], nl.Type.Width*8-1) gins(a, &n3, &n2) } else { diff --git a/src/cmd/compile/internal/mips64/gsubr.go b/src/cmd/compile/internal/mips64/gsubr.go index d63d35d966..60805270af 100644 --- a/src/cmd/compile/internal/mips64/gsubr.go +++ b/src/cmd/compile/internal/mips64/gsubr.go @@ -88,11 +88,11 @@ func ginsbranch(as obj.As, t *gc.Type, n1, n2 *gc.Node, likely int) *obj.Prog { } func ginscmp(op gc.Op, t *gc.Type, n1, n2 *gc.Node, likely int) *obj.Prog { - if !gc.Isfloat[t.Etype] && (op == gc.OLT || op == gc.OGE) { + if !t.IsFloat() && (op == gc.OLT || op == gc.OGE) { // swap nodes to fit SGT instruction n1, n2 = n2, n1 } - if gc.Isfloat[t.Etype] && (op == gc.OLT || op == gc.OLE) { + if t.IsFloat() && (op == gc.OLT || op == gc.OLE) { // swap nodes to fit CMPGT, CMPGE instructions and reverse relation n1, n2 = n2, n1 if op == gc.OLT { diff --git a/src/cmd/compile/internal/ppc64/ggen.go b/src/cmd/compile/internal/ppc64/ggen.go index 21b19eece4..605f82ccd2 100644 --- a/src/cmd/compile/internal/ppc64/ggen.go +++ b/src/cmd/compile/internal/ppc64/ggen.go @@ -136,7 +136,7 @@ func dodiv(op gc.Op, nl *gc.Node, nr *gc.Node, res *gc.Node) { t0 := t check := false - if gc.Issigned[t.Etype] { + if t.IsSigned() { check = true if gc.Isconst(nl, gc.CTINT) && nl.Int() != -(1<