| // +build ignore |
| |
| // This is a slice of the fmt package. |
| |
| package main |
| |
| type pp struct { |
| field interface{} |
| } |
| |
| func newPrinter() *pp { |
| return new(pp) |
| } |
| |
| func Fprintln(a ...interface{}) { |
| p := newPrinter() |
| p.doPrint(a, true, true) |
| } |
| |
| func Println(a ...interface{}) { |
| Fprintln(a...) |
| } |
| |
| func (p *pp) doPrint(a []interface{}, addspace, addnewline bool) { |
| print(a[0]) // @types S | string |
| stringer := a[0].(interface { |
| String() string |
| }) |
| |
| stringer.String() |
| print(stringer) // @types S |
| } |
| |
| type S int |
| |
| func (S) String() string { return "" } |
| |
| func main() { |
| Println("Hello, World!", S(0)) |
| } |
| |
| // @calls (*main.pp).doPrint -> (main.S).String |