1
0
mirror of https://github.com/golang/go synced 2024-11-23 00:40:08 -07:00

cmd/compile: use correct line number for := (LCOLAS)

- use same local variable name (lno) for line number for LCOLAS everywhere
- remove now unneeded assignment of line number to yylval.i in lexer

Fix per suggestion of mdempsky.

Fixes #13415.

Change-Id: Ie3c7f5681615042a12b81b26724b3a5d8a979c25
Reviewed-on: https://go-review.googlesource.com/17248
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
Robert Griesemer 2015-11-27 15:27:14 -08:00
parent a0ea93dea5
commit e18cd34c76
3 changed files with 23 additions and 4 deletions

View File

@ -1253,7 +1253,6 @@ l0:
c1 = getc()
if c1 == '=' {
c = int(LCOLAS)
yylval.i = int(lexlineno)
goto lx
}

View File

@ -717,7 +717,7 @@ func (p *parser) simple_stmt(labelOk, rangeOk bool) *Node {
return stmt
case LCOLAS:
line := lineno
lno := lineno
p.next()
if rangeOk && p.got(LRANGE) {
@ -746,7 +746,7 @@ func (p *parser) simple_stmt(labelOk, rangeOk bool) *Node {
} // it's a colas, so must not re-use an oldname
return ts
}
return colas(lhs, rhs, int32(line))
return colas(lhs, rhs, int32(lno))
default:
p.syntax_error("expecting := or = or comma")
@ -849,6 +849,7 @@ func (p *parser) case_(tswitch *Node) *Node {
case LCOLAS:
// LCASE expr_or_type_list LCOLAS expr ':'
lno := lineno
p.next()
rhs := p.expr()
@ -857,7 +858,7 @@ func (p *parser) case_(tswitch *Node) *Node {
// done in casebody()
markdcl() // matching popdcl in caseblock
stmt := Nod(OXCASE, nil, nil)
stmt.List = list1(colas(cases, list1(rhs), int32(p.op)))
stmt.List = list1(colas(cases, list1(rhs), int32(lno)))
p.want(':') // consume ':' after declaring select cases for correct lineno
return stmt

View File

@ -0,0 +1,19 @@
// errorcheck
// Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Verify that error message regarding := appears on
// correct line (and not on the line of the 2nd :=).
package p
func f() {
select {
case x, x := <-func() chan int { // ERROR "x repeated on left side of :="
c := make(chan int)
return c
}():
}
}