+++ /dev/null
-// +build ignore
-
-package A1
-
-import (
- . "fmt"
- myfmt "fmt"
- "os"
- "strings"
-)
-
-func example(n int) {
- x := "foo" + strings.Repeat("\t", n)
- // Match, despite named import.
- myfmt.Errorf("%s", x)
-
- // Match, despite dot import.
- Errorf("%s", x)
-
- // Match: multiple matches in same function are possible.
- myfmt.Errorf("%s", x)
-
- // No match: wildcarded operand has the wrong type.
- myfmt.Errorf("%s", 3)
-
- // No match: function operand doesn't match.
- myfmt.Printf("%s", x)
-
- // No match again, dot import.
- Printf("%s", x)
-
- // Match.
- myfmt.Fprint(os.Stderr, myfmt.Errorf("%s", x+"foo"))
-
- // No match: though this literally matches the template,
- // fmt doesn't resolve to a package here.
- var fmt struct{ Errorf func(string, string) }
- fmt.Errorf("%s", x)
-
- // Recursive matching:
-
- // Match: both matches are well-typed, so both succeed.
- myfmt.Errorf("%s", myfmt.Errorf("%s", x+"foo").Error())
-
- // Outer match succeeds, inner doesn't: 3 has wrong type.
- myfmt.Errorf("%s", myfmt.Errorf("%s", 3).Error())
-
- // Inner match succeeds, outer doesn't: the inner replacement
- // has the wrong type (error not string).
- myfmt.Errorf("%s", myfmt.Errorf("%s", x+"foo"))
-}