Commit d5960e30 authored by Daniel Martí's avatar Daniel Martí

cmd/compile: turn some pointer params into results

These are likely from the time when gc was written in C. There is no
need for any of these to be passed pointers, as the previous values are
not kept in any way, and the pointers are never nil. Others were left
untouched as they fell into one of these useful cases.

While at it, also turn some 0/1 integers into booleans.

Passes toolstash -cmp on std cmd.

Change-Id: Id3a9c9e84ef89536c4dc69a7fdbacd0fd7a76a9b
Reviewed-on: https://go-review.googlesource.com/72990
Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent f3884680
...@@ -13,7 +13,7 @@ import ( ...@@ -13,7 +13,7 @@ import (
// range // range
func typecheckrange(n *Node) { func typecheckrange(n *Node) {
var toomany int var toomany bool
var why string var why string
var t1 *types.Type var t1 *types.Type
var t2 *types.Type var t2 *types.Type
...@@ -50,7 +50,7 @@ func typecheckrange(n *Node) { ...@@ -50,7 +50,7 @@ func typecheckrange(n *Node) {
} }
n.Type = t n.Type = t
toomany = 0 toomany = false
switch t.Etype { switch t.Etype {
default: default:
yyerrorl(n.Pos, "cannot range over %L", n.Right) yyerrorl(n.Pos, "cannot range over %L", n.Right)
...@@ -73,7 +73,7 @@ func typecheckrange(n *Node) { ...@@ -73,7 +73,7 @@ func typecheckrange(n *Node) {
t1 = t.Elem() t1 = t.Elem()
t2 = nil t2 = nil
if n.List.Len() == 2 { if n.List.Len() == 2 {
toomany = 1 toomany = true
} }
case TSTRING: case TSTRING:
...@@ -81,7 +81,7 @@ func typecheckrange(n *Node) { ...@@ -81,7 +81,7 @@ func typecheckrange(n *Node) {
t2 = types.Runetype t2 = types.Runetype
} }
if n.List.Len() > 2 || toomany != 0 { if n.List.Len() > 2 || toomany {
yyerrorl(n.Pos, "too many variables in range") yyerrorl(n.Pos, "too many variables in range")
} }
......
...@@ -1800,35 +1800,32 @@ func hashmem(t *types.Type) *Node { ...@@ -1800,35 +1800,32 @@ func hashmem(t *types.Type) *Node {
return n return n
} }
func ifacelookdot(s *types.Sym, t *types.Type, followptr *bool, ignorecase bool) *types.Field { func ifacelookdot(s *types.Sym, t *types.Type, ignorecase bool) (m *types.Field, followptr bool) {
*followptr = false
if t == nil { if t == nil {
return nil return nil, false
} }
var m *types.Field
path, ambig := dotpath(s, t, &m, ignorecase) path, ambig := dotpath(s, t, &m, ignorecase)
if path == nil { if path == nil {
if ambig { if ambig {
yyerror("%v.%v is ambiguous", t, s) yyerror("%v.%v is ambiguous", t, s)
} }
return nil return nil, false
} }
for _, d := range path { for _, d := range path {
if d.field.Type.IsPtr() { if d.field.Type.IsPtr() {
*followptr = true followptr = true
break break
} }
} }
if m.Type.Etype != TFUNC || m.Type.Recv() == nil { if m.Type.Etype != TFUNC || m.Type.Recv() == nil {
yyerror("%v.%v is a field, not a method", t, s) yyerror("%v.%v is a field, not a method", t, s)
return nil return nil, followptr
} }
return m return m, followptr
} }
func implements(t, iface *types.Type, m, samename **types.Field, ptr *int) bool { func implements(t, iface *types.Type, m, samename **types.Field, ptr *int) bool {
...@@ -1873,11 +1870,10 @@ func implements(t, iface *types.Type, m, samename **types.Field, ptr *int) bool ...@@ -1873,11 +1870,10 @@ func implements(t, iface *types.Type, m, samename **types.Field, ptr *int) bool
if im.Broke() { if im.Broke() {
continue continue
} }
var followptr bool tm, followptr := ifacelookdot(im.Sym, t, false)
tm := ifacelookdot(im.Sym, t, &followptr, false)
if tm == nil || tm.Nointerface() || !eqtype(tm.Type, im.Type) { if tm == nil || tm.Nointerface() || !eqtype(tm.Type, im.Type) {
if tm == nil { if tm == nil {
tm = ifacelookdot(im.Sym, t, &followptr, true) tm, followptr = ifacelookdot(im.Sym, t, true)
} }
*m = im *m = im
*samename = tm *samename = tm
......
...@@ -3910,17 +3910,17 @@ func (n *Node) isterminating() bool { ...@@ -3910,17 +3910,17 @@ func (n *Node) isterminating() bool {
if n.HasBreak() { if n.HasBreak() {
return false return false
} }
def := 0 def := false
for _, n1 := range n.List.Slice() { for _, n1 := range n.List.Slice() {
if !n1.Nbody.isterminating() { if !n1.Nbody.isterminating() {
return false return false
} }
if n1.List.Len() == 0 { // default if n1.List.Len() == 0 { // default
def = 1 def = true
} }
} }
if n.Op != OSELECT && def == 0 { if n.Op != OSELECT && !def {
return false return false
} }
return true return true
......
...@@ -2481,9 +2481,8 @@ func aliased(n *Node, all []*Node, i int) bool { ...@@ -2481,9 +2481,8 @@ func aliased(n *Node, all []*Node, i int) bool {
// Also record whether there are any writes to main memory. // Also record whether there are any writes to main memory.
// Also record whether there are any writes to variables // Also record whether there are any writes to variables
// whose addresses have been taken. // whose addresses have been taken.
memwrite := 0 memwrite := false
varwrite := false
varwrite := 0
for _, an := range all[:i] { for _, an := range all[:i] {
a := outervalue(an.Left) a := outervalue(an.Left)
...@@ -2492,18 +2491,18 @@ func aliased(n *Node, all []*Node, i int) bool { ...@@ -2492,18 +2491,18 @@ func aliased(n *Node, all []*Node, i int) bool {
} }
if a.Op != ONAME { if a.Op != ONAME {
memwrite = 1 memwrite = true
continue continue
} }
switch n.Class() { switch n.Class() {
default: default:
varwrite = 1 varwrite = true
continue continue
case PAUTO, PPARAM, PPARAMOUT: case PAUTO, PPARAM, PPARAMOUT:
if n.Addrtaken() { if n.Addrtaken() {
varwrite = 1 varwrite = true
continue continue
} }
...@@ -2519,7 +2518,7 @@ func aliased(n *Node, all []*Node, i int) bool { ...@@ -2519,7 +2518,7 @@ func aliased(n *Node, all []*Node, i int) bool {
// that are being written. // that are being written.
// If no computed addresses are affected by the writes, no aliasing. // If no computed addresses are affected by the writes, no aliasing.
if memwrite == 0 && varwrite == 0 { if !memwrite && !varwrite {
return false return false
} }
...@@ -3208,7 +3207,7 @@ func copyany(n *Node, init *Nodes, runtimecall bool) *Node { ...@@ -3208,7 +3207,7 @@ func copyany(n *Node, init *Nodes, runtimecall bool) *Node {
return nlen return nlen
} }
func eqfor(t *types.Type, needsize *int) *Node { func eqfor(t *types.Type) (n *Node, needsize bool) {
// Should only arrive here with large memory or // Should only arrive here with large memory or
// a struct/array containing a non-memory field/element. // a struct/array containing a non-memory field/element.
// Small memory is handled inline, and single non-memory // Small memory is handled inline, and single non-memory
...@@ -3217,8 +3216,7 @@ func eqfor(t *types.Type, needsize *int) *Node { ...@@ -3217,8 +3216,7 @@ func eqfor(t *types.Type, needsize *int) *Node {
case AMEM: case AMEM:
n := syslook("memequal") n := syslook("memequal")
n = substArgTypes(n, t, t) n = substArgTypes(n, t, t)
*needsize = 1 return n, true
return n
case ASPECIAL: case ASPECIAL:
sym := typesymprefix(".eq", t) sym := typesymprefix(".eq", t)
n := newname(sym) n := newname(sym)
...@@ -3229,11 +3227,10 @@ func eqfor(t *types.Type, needsize *int) *Node { ...@@ -3229,11 +3227,10 @@ func eqfor(t *types.Type, needsize *int) *Node {
ntype.Rlist.Append(anonfield(types.Types[TBOOL])) ntype.Rlist.Append(anonfield(types.Types[TBOOL]))
ntype = typecheck(ntype, Etype) ntype = typecheck(ntype, Etype)
n.Type = ntype.Type n.Type = ntype.Type
*needsize = 0 return n, false
return n
} }
Fatalf("eqfor %v", t) Fatalf("eqfor %v", t)
return nil return nil, false
} }
// The result of walkcompare MUST be assigned back to n, e.g. // The result of walkcompare MUST be assigned back to n, e.g.
...@@ -3353,11 +3350,11 @@ func walkcompare(n *Node, init *Nodes) *Node { ...@@ -3353,11 +3350,11 @@ func walkcompare(n *Node, init *Nodes) *Node {
ar = typecheck(ar, Etop) ar = typecheck(ar, Etop)
init.Append(ar) init.Append(ar)
var needsize int fn, needsize := eqfor(t)
call := nod(OCALL, eqfor(t, &needsize), nil) call := nod(OCALL, fn, nil)
call.List.Append(pl) call.List.Append(pl)
call.List.Append(pr) call.List.Append(pr)
if needsize != 0 { if needsize {
call.List.Append(nodintconst(t.Width)) call.List.Append(nodintconst(t.Width))
} }
res := call res := call
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment