mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile: fix OTYPESW Op comment
OTYPESW Op comment says
// List = Left.(type)
this seems to be wrong. Adding
fmt.Printf("n: %v\n", cond)
fmt.Printf(" n.List: %v\n", cond.List)
fmt.Printf(" n.Left: %v\n", cond.Left)
fmt.Printf(" n.Right: %v\n", cond.Right)
to (s *typeSwitch) walk(sw *Node), and compiling the following code
snippet
var y interface{}
switch x := y.(type) {
default:
println(x)
}
prints
n: <node TYPESW>
n.List:
n.Left: x
n.Right: y
The correct OTYPESW Node field positions are
// Left = Right.(type)
This is confirmed by the fact that, further in the code,
typeSwitch.walk() checks that Right (and not Left) is of type
interface:
cond.Right = walkexpr(cond.Right, &sw.Ninit)
if !cond.Right.Type.IsInterface() {
yyerror("type switch must be on an interface")
return
}
This patch fixes the OTYPESW comment.
Change-Id: Ief1e409cfabb7640d7f7b0d4faabbcffaf605450
Reviewed-on: https://go-review.googlesource.com/69112
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
parent
0c53b4ec4f
commit
07f7db3ea9
1 changed files with 1 additions and 1 deletions
|
|
@ -571,7 +571,7 @@ const (
|
|||
ORETURN // return List
|
||||
OSELECT // select { List } (List is list of OXCASE or OCASE)
|
||||
OSWITCH // switch Ninit; Left { List } (List is a list of OXCASE or OCASE)
|
||||
OTYPESW // List = Left.(type) (appears as .Left of OSWITCH)
|
||||
OTYPESW // Left = Right.(type) (appears as .Left of OSWITCH)
|
||||
|
||||
// types
|
||||
OTCHAN // chan int
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue