]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: fix OTYPESW Op comment
authorAlberto Donizetti <alb.donizetti@gmail.com>
Sun, 8 Oct 2017 12:12:40 +0000 (14:12 +0200)
committerAlberto Donizetti <alb.donizetti@gmail.com>
Wed, 11 Oct 2017 07:55:04 +0000 (07:55 +0000)
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>
src/cmd/compile/internal/gc/syntax.go

index 2fc63edd25d8040114829d9b746a9ac0a47d5299..826dd1fb22a50daeff0d0061eb6ab35a682e5bad 100644 (file)
@@ -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