From 07f7db3ea99fae98dd041d54cceda7ac5d4ac1fe Mon Sep 17 00:00:00 2001 From: Alberto Donizetti Date: Sun, 8 Oct 2017 14:12:40 +0200 Subject: [PATCH] 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: 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 --- src/cmd/compile/internal/gc/syntax.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cmd/compile/internal/gc/syntax.go b/src/cmd/compile/internal/gc/syntax.go index 2fc63edd25..826dd1fb22 100644 --- a/src/cmd/compile/internal/gc/syntax.go +++ b/src/cmd/compile/internal/gc/syntax.go @@ -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 -- 2.48.1