Skip to content

Commit

Permalink
cmd/compile: eliminate some lineno uses
Browse files Browse the repository at this point in the history
Focused on ranges, selects and switches for this one.

While at it, simplify some vars in typecheckselect.

Updates #19683.

Change-Id: Ib6aabe0f6826cb1930483aeb4bb2de1ff8052d9e
Reviewed-on: https://go-review.googlesource.com/69690
Run-TryBot: Daniel Martí <[email protected]>
Reviewed-by: Matthew Dempsky <[email protected]>
TryBot-Result: Gobot Gobot <[email protected]>
  • Loading branch information
mvdan committed Oct 11, 2017
1 parent 07f7db3 commit 6013052
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 26 deletions.
10 changes: 5 additions & 5 deletions src/cmd/compile/internal/gc/range.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ func typecheckrange(n *Node) {
toomany = 0
switch t.Etype {
default:
yyerror("cannot range over %L", n.Right)
yyerrorl(n.Pos, "cannot range over %L", n.Right)
goto out

case TARRAY, TSLICE:
Expand All @@ -65,7 +65,7 @@ func typecheckrange(n *Node) {

case TCHAN:
if !t.ChanDir().CanRecv() {
yyerror("invalid operation: range %v (receive from send-only type %v)", n.Right, n.Right.Type)
yyerrorl(n.Pos, "invalid operation: range %v (receive from send-only type %v)", n.Right, n.Right.Type)
goto out
}

Expand All @@ -81,7 +81,7 @@ func typecheckrange(n *Node) {
}

if n.List.Len() > 2 || toomany != 0 {
yyerror("too many variables in range")
yyerrorl(n.Pos, "too many variables in range")
}

v1 = nil
Expand All @@ -108,7 +108,7 @@ func typecheckrange(n *Node) {
if v1.Name != nil && v1.Name.Defn == n {
v1.Type = t1
} else if v1.Type != nil && assignop(t1, v1.Type, &why) == 0 {
yyerror("cannot assign type %v to %L in range%s", t1, v1, why)
yyerrorl(n.Pos, "cannot assign type %v to %L in range%s", t1, v1, why)
}
checkassign(n, v1)
}
Expand All @@ -117,7 +117,7 @@ func typecheckrange(n *Node) {
if v2.Name != nil && v2.Name.Defn == n {
v2.Type = t2
} else if v2.Type != nil && assignop(t2, v2.Type, &why) == 0 {
yyerror("cannot assign type %v to %L in range%s", t2, v2, why)
yyerrorl(n.Pos, "cannot assign type %v to %L in range%s", t2, v2, why)
}
checkassign(n, v2)
}
Expand Down
27 changes: 10 additions & 17 deletions src/cmd/compile/internal/gc/select.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,39 +8,32 @@ import "cmd/compile/internal/types"

// select
func typecheckselect(sel *Node) {
var ncase *Node
var n *Node

var def *Node
lno := setlineno(sel)
count := 0
typecheckslice(sel.Ninit.Slice(), Etop)
for _, n1 := range sel.List.Slice() {
count++
ncase = n1
setlineno(ncase)
for _, ncase := range sel.List.Slice() {
if ncase.Op != OXCASE {
setlineno(ncase)
Fatalf("typecheckselect %v", ncase.Op)
}

if ncase.List.Len() == 0 {
// default
if def != nil {
yyerror("multiple defaults in select (first at %v)", def.Line())
yyerrorl(ncase.Pos, "multiple defaults in select (first at %v)", def.Line())
} else {
def = ncase
}
} else if ncase.List.Len() > 1 {
yyerror("select cases cannot be lists")
yyerrorl(ncase.Pos, "select cases cannot be lists")
} else {
ncase.List.SetFirst(typecheck(ncase.List.First(), Etop))
n = ncase.List.First()
n := ncase.List.First()
ncase.Left = n
ncase.List.Set(nil)
setlineno(n)
switch n.Op {
default:
yyerror("select case must be receive, send or assign recv")
yyerrorl(n.Pos, "select case must be receive, send or assign recv")

// convert x = <-c into OSELRECV(x, <-c).
// remove implicit conversions; the eventual assignment
Expand All @@ -51,7 +44,7 @@ func typecheckselect(sel *Node) {
}

if n.Right.Op != ORECV {
yyerror("select assignment must have receive on right hand side")
yyerrorl(n.Pos, "select assignment must have receive on right hand side")
break
}

Expand All @@ -60,7 +53,7 @@ func typecheckselect(sel *Node) {
// convert x, ok = <-c into OSELRECV2(x, <-c) with ntest=ok
case OAS2RECV:
if n.Rlist.First().Op != ORECV {
yyerror("select assignment must have receive on right hand side")
yyerrorl(n.Pos, "select assignment must have receive on right hand side")
break
}

Expand All @@ -72,7 +65,7 @@ func typecheckselect(sel *Node) {

// convert <-c into OSELRECV(N, <-c)
case ORECV:
n = nod(OSELRECV, nil, n)
n = nodl(n.Pos, OSELRECV, nil, n)

n.SetTypecheck(1)
ncase.Left = n
Expand All @@ -85,7 +78,7 @@ func typecheckselect(sel *Node) {
typecheckslice(ncase.Nbody.Slice(), Etop)
}

sel.Xoffset = int64(count)
sel.Xoffset = int64(sel.List.Len())
lineno = lno
}

Expand Down
7 changes: 3 additions & 4 deletions src/cmd/compile/internal/gc/swt.go
Original file line number Diff line number Diff line change
Expand Up @@ -393,7 +393,7 @@ func casebody(sw *Node, typeswvar *Node) {
case 0:
// default
if def != nil {
yyerror("more than one default case")
yyerrorl(n.Pos, "more than one default case")
}
// reuse original default case
n.Right = jmp
Expand Down Expand Up @@ -673,14 +673,13 @@ func (s *typeSwitch) walk(sw *Node) {
return
}
if cond.Right == nil {
setlineno(sw)
yyerror("type switch must have an assignment")
yyerrorl(sw.Pos, "type switch must have an assignment")
return
}

cond.Right = walkexpr(cond.Right, &sw.Ninit)
if !cond.Right.Type.IsInterface() {
yyerror("type switch must be on an interface")
yyerrorl(sw.Pos, "type switch must be on an interface")
return
}

Expand Down

0 comments on commit 6013052

Please sign in to comment.