fix: handle selector expression in type switch

This commit is contained in:
Marc Vertes
2019-11-25 23:52:03 +01:00
committed by Traefiker Bot
parent 786ea366ab
commit d44e4af527
2 changed files with 21 additions and 0 deletions

17
_test/switch21.go Normal file
View File

@@ -0,0 +1,17 @@
package main
import "fmt"
func main() {
var err error
switch v := err.(type) {
case fmt.Formatter:
println("formatter")
default:
fmt.Println(v)
}
}
// Output:
// <nil>

View File

@@ -173,6 +173,10 @@ func (interp *Interpreter) cfg(root *node) ([]*node, error) {
switch sym, _, ok := sc.lookup(n.child[0].ident); {
case ok && sym.kind == typeSym:
typ = sym.typ
case n.child[0].kind == selectorExpr:
if typ, err = nodeType(interp, sc, n.child[0]); err != nil {
return false
}
case n.child[0].ident == "nil":
typ = sc.getType("interface{}")
default: